我有一个登录表,用于记录不同项目时间的人员,我需要编制一份报告,说明每个项目的工作日期。
我的表看起来像这样:
id | project | time_in
----------------------------------
1 | 1 | 2014-12-07 05:00:00
2 | 2 | 2014-12-08 06:00:00
3 | 1 | 2014-12-05 14:00:00
4 | 3 | 2014-12-07 08:30:00
5 | 2 | 2014-12-07 12:00:00
6 | 1 | 2014-12-08 05:00:00
7 | 2 | 2014-12-05 06:00:00
8 | 1 | 2014-12-06 14:00:00
9 | 3 | 2014-12-08 08:30:00
10 | 2 | 2014-12-06 12:00:00
time_in
的类型为TIMESTAMP
。
我需要弄清楚的是,给定一个日期范围(例如12月5日至8日),每个项目的工作日。我对查询完全灵活,即我可以使用循环生成查询,并且我对结果集的外观也很灵活,只要我可以解析它以获取我需要的信息。例如,也许:
project | days
-----------------------------------------------------
1 | 2014-12-07,2014-12-08,2014-12-05,2014-12-06
2 | 2014-12-08,2014-12-07,2014-12-05,2014-12-06
3 | 2014-12-07,2014-12-08
或者更好:
project | d0 | d1 | d2 | d3
---------------------------
1 | 1 | 1 | 1 | 1
2 | 1 | 1 | 1 | 1
3 | 0 | 0 | 1 | 1
老实说我甚至不知道从哪里开始这样的查询,如果它甚至可能的话。
答案 0 :(得分:2)
您可以使用group_concat
来获得初步结果:
select project, group_concat(date(time_in) order by time_in)
from yourtable
group by project
如果您想要其他列,可以将max
与case
:
select project,
max(case when date(time_in) = '2014-12-05' then 1 else 0 end) d0,
max(case when date(time_in) = '2014-12-06' then 1 else 0 end) d1,
max(case when date(time_in) = '2014-12-07' then 1 else 0 end) d2,
max(case when date(time_in) = '2014-12-08' then 1 else 0 end) d3
from yourtable
group by project