使用与表不同的列创建视图

时间:2015-09-23 06:52:30

标签: sql sqlite

我有一个SQL表,其中有一个列是其中一列是日期。

表1

       ------------------------------------------
       | 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

我想像这样向用户呈现数据:

表2

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

现在fortnite是从当月的第1天到同月的第15天 table1包含abc的访问列表以及他们访问的日期,x人在每个堡垒中获得2次访问。 y在第二个堡垒中只有一次访问。

table2应以所示格式比较这些日期和现有数据。我怎样才能做到这一点? 我使用的是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

但它仅在fortnite_one列中给出了(fortnite1和fortnite2)的结果。

1 个答案:

答案 0 :(得分: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

希望得到这个帮助。