Loading

跨日期汇总统计

场景

从订单表Order中查询,某月每一天的各个支付平台的订单总额,而每天的计算日期从当天的06:00至第二天的06:00

思路

一开始提取订单的创建日期的yyyy-MM-dd部分进行汇总,但对于凌晨00:0006: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))
posted @ 2018-12-11 18:59  牧白  阅读(191)  评论(0编辑  收藏  举报