MySQL - Как заполнять еженедельные данные за месяц - PullRequest
0 голосов
/ 07 ноября 2018

Как выбрать данные из следующей группы таблиц по неделям в месяце

    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 голосов
/ 07 ноября 2018

Просто используйте подзапрос, чтобы получить номер первой недели за месяц, и суммируйте выписки для каждой недели:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...