Возвратный счет за последние 7 дней с заполненными пропущенными днями - PullRequest
0 голосов
/ 11 января 2019

Я очень стараюсь создать набор данных об общих продажах за каждый день за последние 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;

Вы можете играть здесь со скрипкой .

Пожалуйста, скажите мне, что я делаю неправильно, и предложите, как это можно исправить.

Спасибо.

1 Ответ

0 голосов
/ 11 января 2019
... AS qb ON ets.created = qb.dy

Вы сравниваете дату и время с датой без времени. Это не соответствует, потому что время, очевидно, не то же самое.

Чтобы решить эту проблему, вы можете преобразовать дату и время в дату перед сравнением, используя функцию DATE:

... AS qb ON DATE(ets.created) = qb.dy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...