Промежуточный итог запроса MySQL за период, в котором время от 2 вечера в день до 2 вечера следующего дня - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть таблица даты и времени финансовой транзакции.Я уже группируюсь по идентификатору и суммирую суммы, но я хотел бы посмотреть, есть ли чистый способ подсчета этих сумм в MySQL для периодов с 14:00 до 14:00 каждый день.

Возможно, с помощью оператора ROLLUP?

Вот упрощенная версия моего запроса, который выбирает диапазон дат от 2/01 до 2/05

SELECT 
    p.paidtime, 
    SUM(p.amount) as PaymentAmount 
FROM payments p 
WHERE (p.paidtime >= '2019-02-01' AND p.paidtime <= '2019-02-05' OR
    p.paidtime LIKE '2019-02-05%') 
GROUP BY p.requestID 
ORDER BY p.paidtime ASC

В результате получается таблица, подобная этой:

paidtime            PaymentAmount
2019-02-01 07:13:53 6809.00
2019-02-01 10:40:17 1605.81
2019-02-01 14:34:21 368.33
2019-02-01 15:18:13 3516.51
2019-02-01 15:25:14 292.74
2019-02-01 15:30:15 732.36
2019-02-01 15:49:39 2440.84
2019-02-02 09:52:39 2663.43
2019-02-04 09:00:09 265.00
2019-02-04 11:32:23 2307.48
2019-02-04 13:20:51 3878.66
2019-02-05 07:20:46 320.00
2019-02-05 07:38:02 154.08
2019-02-05 11:54:55 320.00
2019-02-05 12:02:53 1068.00
2019-02-05 12:04:56 17028.58
2019-02-05 13:28:21 4880.00
2019-02-05 14:25:02 70.00

Но то, что я хотел бы видеть, так это с промежуточными итогами сумм платежей в точке останова в 2 часа дня.

paidtime            PaymentAmount
2019-02-01 07:13:53 6809.00
2019-02-01 10:40:17 1605.81
                    SUBTOTAL: 8414.81
2019-02-01 14:34:21 368.33
2019-02-01 15:18:13 3516.51
2019-02-01 15:25:14 292.74
2019-02-01 15:30:15 732.36
2019-02-01 15:49:39 2440.84
                    SUBTOTAL: $$$$
2019-02-02 09:52:39 2663.43
2019-02-04 09:00:09 265.00
2019-02-04 11:32:23 2307.48
                    SUBTOTAL: $$$$
2019-02-04 13:20:51 3878.66
2019-02-05 07:20:46 320.00
2019-02-05 07:38:02 154.08
2019-02-05 11:54:55 320.00
2019-02-05 12:02:53 1068.00
2019-02-05 12:04:56 17028.58
2019-02-05 13:28:21 4880.00
                    SUBTOTAL: $$$$
2019-02-05 14:25:02 70.00
                    SUBTOTAL: 70.00

Я знаю, что это можно легко сделать с помощью PHP и циклического просмотра результатов, ноМне интересно, есть ли способ создания промежуточных итогов чисто в MySQL?

1 Ответ

0 голосов
/ 20 февраля 2019

Никогда не используйте like со значениями даты / времени.MySQL имеет много полезных функций даты и времени.Используйте их.

Вы можете делать что хотите, вычитая 14 часов (или прибавляя 10 часов):

SELECT DATE(p.paidtime - INTERVAL 14 HOUR),
       SUM(p.amount) AS PaymentAmount
FROM payments p
WHERE p.paidtime >= '2019-02-01 14:00:00' 
GROUP BY DATE(p.paidtime - INTERVAL 14 HOUR)
ORDER BY DATE(p.paidtime - INTERVAL 14 HOUR)
...