MySQL Group By weeks

199
10 января 2020, 09:40

Есть таблица клиентов, где указана дата регистрации в системе. Необходимо вытащить статистику по регистрации понедельно за каждый месяц, с группировкой по company_id. ВАЖНО, чтобы недели считались по числам 01-10, 11-17, 18- 24, 25-31. В колонках должен быть count() и GROUP_CONCAT(clients.id).

Пробовал так: http://sqlfiddle.com/#!9/7df063/10

Проблема в том, что WEEK это номер недели, числа он в расчет не берет. В идеале на выходе должно получиться так:

Answer 1

ВАЖНО, чтобы недели считались по числам 01-10, 11-17, 18- 24, 25-31

SELECT
  company_id,
  YEAR(dt) AS `year`,
  MONTH(dt) AS `month`,
CASE WHEN DAY(dt) < 11 THEN 1
     WHEN DAY(dt) < 18 THEN 2
     WHEN DAY(dt) < 25 THEN 3
                       ELSE 4 END AS `week_number`, 
  count(id) AS `cnt`, 
  GROUP_CONCAT(id ORDER BY id) AS `client_list`
FROM clients 
GROUP BY 1,2,3,4
ORDER BY 1,2,3,4;

fiddle

READ ALSO
Как подключить Font Awesome 5.8.1 локально (не через CDN)

Как подключить Font Awesome 5.8.1 локально (не через CDN)

Как правильно подключать font awesome 5, меня интересует только локальный способ, через CDN не предлагать, хочу использовать SVG иконки, подключаю...

231
Сверстать рамку с градиентом

Сверстать рамку с градиентом

Есть такой макет

208