2015-09-23 4 views
0

У меня есть таблица SQL, в которой есть записи, из которых один из столбцов - дата.Создание представлений с разными столбцами, чем таблица

table1

 ------------------------------------------ 
     | visit_to | visit_by | visit_on | value | 
     ------------------------------------------ 
      x   a  2015-02-02 1 
      x   b  2015-02-16 2 
      y   c  2015-02-18 3 

Я хочу представить данные для пользователя, как это:

table2

 ----------------------------------- 
     | value | Fortnite 1 | fortnite 2 | 
     ----------------------------------- 
      x   a   b 
      y      c 

теперь fortnite составляет от 1-го числа месяца, до 15-го дня в том же месяце.
Таблица 1 имеет список посещений, сделанных a, b и c и даты их посещения, лицо x получает 2 посещения по одному в каждом fortnite. И y получает только 1 посещение во втором fortnite.

Таблица 2 должна сравнивать эти даты и данные в показанном формате. Как я могу это сделать? Я использую Sqlite.

Вот что это было в состоянии сделать:

select visit_to, visit_by as fortnite_one 
    from visit 
    where julianday(date) - julianday('now','start of month','+1 month','-16 day') <= 0 
union 
select visit_to, visit_by as fortnite_two 
    from visit 
    where julianday(date) - julianday('now','start of month','+1 month','-16 day') >= 0 

Но это дает результат для обоих (fortnite1 и fortnite2) только в fortnite_one колонке.

+0

Возможный дубликат [SQL, создающий новый столбец в представлении] (http://stackoverflow.com/questions/13867938/sql-creating-new-column-in-a-view) –

+0

Проклятье, что вещь проходит над моей головой , – Chronix01

+0

Действительно ли это формат даты, который вы используете в базе данных? Это очень сильно осложняет сравнение; почему вы не используете один из [поддерживаемых форматов дат] (http://www.sqlite.org/lang_datefunc.html)? –

ответ

1

Я предполагаю таблицу и данные, как показано ниже.

create table visit (visit_to text, visit_by text, visit_on datetime, value int); 
insert into visit values('x', 'a', '2015-02-02 00:00:00', 1); 
insert into visit values('x', 'b', '2015-02-16 00:00:00', 2); 
insert into visit values('y', 'c', '2015-02-18 00:00:00', 3); 
insert into visit values('x', 'd', '2015-02-14 00:00:00', 4); 

И запрос такой.

select 
    visit_to, 
    date(visit_on, 'start of month') year_month, 
    replace(rtrim(group_concat((case when date(date(visit_on, '-15 days'), 'start of month') <> date(visit_on, 'start of month') then visit_by else '' end), (case when date(date(visit_on, '-15 days'), 'start of month') <> date(visit_on, 'start of month') then ' ' else '' end))), ' ', ',') fortnite1, 
    replace(rtrim(group_concat((case when date(date(visit_on, '-15 days'), 'start of month') = date(visit_on, 'start of month') then visit_by else '' end), (case when date(date(visit_on, '-15 days'), 'start of month') = date(visit_on, 'start of month') then ' ' else '' end))), ' ', ',') fortnite2 
from visit 
group by visit_to, date(visit_on, 'start of month') 
; 

Вы можете попробовать http://goo.gl/TXomRO

Надежда эта помощь.

+0

чувак, удивительный, это работает, хотя я немного подкорректирую его, чтобы дать результат, который я хочу, и это потрясающе. Большое спасибо: D – Chronix01

+0

, если мы хотим запустить этот запрос только в течение определенного месяца, пусть июнь, можем ли мы это сделать? – Chronix01

+0

добавить, где дата (visit_on, 'начало месяца') = '2015-06-01' после и после группы – daniel

Смежные вопросы