跨日期汇总统计
场景
从订单表Order
中查询,某月每一天的各个支付平台的订单总额,而每天的计算日期从当天的06:00
至第二天的06:00
思路
一开始提取订单的创建日期的yyyy-MM-dd
部分进行汇总,但对于凌晨00:00
到06:00
的时间段数据就会出错。
方案一
最先想到的是将这个时间段的每天时间拆开进行查询,第一天到最后天分成30多次查询,最后将结果汇总。最后觉得这种方案太low就放弃了。
方案二
很长一段时间无解,经过一段时间思考后所有的时间减少6小时不就行了,换个思路一下就解决了。代码很简单,思路很重要。
代码实现
-- 先将时间减去6小时即21600秒,仅用sql就能解决
select PayTime,sum(webchat) as webchat ,sum(alipay) alipay,sum(card) card from
(
select dateadd(s,-21600, PayTime) as PayTime,webchat,alipay,card from order where PayTime>'2018-11-01 06:00' and PayTime<'2018-12-01 06:00'
)
group by (CONVERT(varchar, PayTime, 111))