У меня есть таблица Orders
в моей базе данных SQLite. Я хочу сгруппировать данные по 168 часам (7 дням) и подсчитать до Orders
за 168 часов.
Я создал «календарную таблицу» в памяти, и яПрисоединил мою таблицу Orders
к этому календарному набору.
Это прекрасно работает, когда я группирую по 12, 24, 48 или даже 120 часам (5 дней). Но почему-то это не работает, когда я группирую по 168 часов (7 дней). Я получаю NULL
значений вместо того, что count()
должно действительно возвращать.
Следующий код sql является примером, который группирует каждые 120 часов (5 дней).
CREATE TABLE IF NOT EXISTS Orders (
Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
Key TEXT,
Timestamp TEXT NOT NULL
);
INSERT INTO Orders (Key, Timestamp) VALUES ('k1', '2019-10-01 10:00:23');
INSERT INTO Orders (Key, Timestamp) VALUES ('k2', '2019-10-01 15:45:19');
INSERT INTO Orders (Key, Timestamp) VALUES ('k3', '2019-10-02 17:05:19');
INSERT INTO Orders (Key, Timestamp) VALUES ('k4', '2019-10-03 20:12:19');
INSERT INTO Orders (Key, Timestamp) VALUES ('k5', '2019-10-04 08:49:19');
INSERT INTO Orders (Key, Timestamp) VALUES ('k6', '2019-10-05 11:24:19');
INSERT INTO Orders (Key, Timestamp) VALUES ('k7', '2019-10-07 11:24:19');
WITH RECURSIVE dates(date1) AS (
VALUES('2019-10-01 00:00:00')
UNION ALL
SELECT datetime(date1, '+120 hours')
FROM dates
WHERE date1 <= '2019-10-29 00:00:00'
)
SELECT date1 as __ddd, d2.* FROM dates AS d1
LEFT JOIN (
SELECT count(Key) AS OrderKey,
datetime((strftime('%s', timestamp) / 432000) * 432000, 'unixepoch') as __interval
FROM `Orders`
WHERE `Timestamp` >= '2019-09-29T00:00:00.000'
GROUP BY __interval LIMIT 10
) d2 ON d1.date1 = d2.__interval
Важное примечание: Если вы хотите обновить этот код, чтобы протестировать его с 168 часами (7 днями), то вам нужно сделать следующее:
- Изменить
+120 hours
до +168 hours
- Измените
432000
(432000 == 120 часов) на 604800 (604800 == 168 часов) - обратите внимание, что это число происходитдважды, оба должны быть заменены
Кто-нибудь есть идеи, почему он перестает работать должным образом, когда я изменяю код sql на 168 часов?