Я очень стараюсь создать набор данных об общих продажах за каждый день за последние 7 дней с заполнением пропущенных дней.
Результат, который я ищу, для данных моего примера:
2019-01-05 0
2019-01-06 0
2019-01-07 0
2019-01-08 0
2019-01-09 0
2019-01-10 1
2019-01-11 0
Что я получаю:
2019-01-05 0
2019-01-06 0
2019-01-07 0
2019-01-08 0
2019-01-09 0
2019-01-10 0
2019-01-11 0
Пример данных, хотя и сокращенный для SO, выглядит следующим образом: всего одна строка:
id | saleID | amount | created
---|-------------------|-------------|-------------
1 | 6032b317-1533.... | 20000 | 2019-01-10 23:56:4
ID = INT 11 Auto
saleID = CHAR 36 INDEX
amount = INT 11 INDEX
created = DATETIME INDEX
В данный момент мой запрос выглядит следующим образом:
SELECT
qb.dy AS saleDay,
COALESCE(COUNT(ets.saleID), 0) AS saleDayTotal
FROM eventTicketSales AS ets
RIGHT JOIN (
SELECT curdate() AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 1 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 2 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 3 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 4 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 5 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 6 DAY) AS dy
) AS qb ON ets.created = qb.dy AND ets.created > DATE_SUB(curdate(), INTERVAL 7 DAY)
GROUP BY qb.dy
ORDER BY qb.dy ASC;
Вы можете играть здесь со скрипкой .
Пожалуйста, скажите мне, что я делаю неправильно, и предложите, как это можно исправить.
Спасибо.