我有一张财务交易日期时间和金额表。我已经按ID分组并对其金额进行了汇总,但是我想看看是否存在一种纯MySQL方法将每天下午2点到下午2点之间的金额进行小计。
也许带有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
但是我想看到的是这样的情况,其中包含2PM中断点的付款金额小计。
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中创建小计?
答案 0 :(得分:1)
切勿将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)