我有一个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包含a
,b
和c
的访问列表以及他们访问的日期,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)的结果。
答案 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
希望得到这个帮助。