MySQL-如何在一个月内填充每周数据

时间:2018-11-07 07:03:40

标签: mysql sql

如何在一个月内按周从下表组中选择数据

    Date       Project      Value   Week
+----------+--------------+-------+------+
 2018-11-07       A           2      45
 2018-11-08       B           4      45
 2018-11-09       C           3      45
 2018-11-12       B           6      46
 2018-11-13       A           5      46
 2018-11-14       C           6      46

(第一周在星期日或一个月中的星期几结束)

所以我的结果应该像这样。

 Project    1st Week 2nd Week 3rd Week 4th Week 5th Week  
+----------+--------+--------+--------+--------+--------
    A           0        2        5        0        0
    B           0        4        6        0        0 
    C           0        3        6        0        0

我尝试这个:

 SELECT project, value, week, date
 FROM module_progress
 WHERE
    created_at BETWEEN '2018-11-01 00:00:00' AND '2018-11-31
 AND date > DATE_SUB(NOW(), INTERVAL 1 WEEK) 23:59:59'
 GROUP BY week

谢谢

1 个答案:

答案 0 :(得分:0)

只需使用子查询即可获取该月的第一周的值,并汇总每周的案例陈述:

select year(date) as y, month(date) as m, project,
    sum(case when week=w0 then value else 0 end) as w1,
    sum(case when week=w0+1 then value else 0 end) as w2,
    sum(case when week=w0+2 then value else 0 end) as w3,
    sum(case when week=w0+3 then value else 0 end) as w4,
    sum(case when week=w0+4 then value else 0 end) as w5
from #date d
join (select year(date) as y, month(date) as m, min(week) as w0 from #date group by year(date), month(date))
    as d0 on d0.y=year(date) and d0.m=month(date)
group by year(date), month(date), project