sql - 基于日期范围的 SQL 聚合
问题描述
我在 MSSQL 表中有以下数据。要求是将属于相同/结束时间段的用户的记录分组,并汇总 Rate 字段。
有没有办法通过即时查询来实现这一点?
Row Data
-----------------------------------------------------
RawId Start Time End Time User Rate
1 1/9/2021 14:29 1/9/2021 14:40 User-1 10
2 1/9/2021 10:37 1/9/2021 14:00 User-2 20
3 1/9/2021 14:03 1/9/2021 14:59 User-2 30
4 1/9/2021 8:51 1/9/2021 14:39 User-1 40
5 1/9/2021 14:02 1/9/2021 14:59 User-2 50
Expected Output
-----------------------------------------------------
ProID Start Time End Time User RateTotal
xx1 1/9/2021 14:29 1/9/2021 14:40 User-1 50
xx2 1/9/2021 14:02 1/9/2021 14:59 User-2 80
xx3 1/9/2021 10:37 1/9/2021 14:00 User-2 20
商业逻辑
ProID xx1:RawID 1 & 4,属于 User-1,RawID 1 开始和结束时间 (14:29-14:40) 在 RawID 4 (08:51-14:39) 内。在这种情况下,必须将费率相加并仅显示一条记录。
ProID xx2:RawID 3 & 5,属于 User-2,RawID 3 开始和结束时间 (14:03-14:59) 在 RawID 5 (14:02-14:59) 内。在这种情况下,必须将费率相加并仅显示一条记录。
ProID xx3:RawID 2 也属于 User-2,但开始和结束时间 (10:37-14:00) 不属于其他 User-2 记录。因此,这将被视为单独的行。
解决方案
with cte as
(
select Rate as Rate,dateadd(hour,datediff(HOUR,0,StartTime),0) as starttime,
dateadd(HOUR,DATEDIFF(hour,0,endtime),0) as EndTime
from Row_Data
)
select sum(rate) as Rate,StartTime,Endtime from cte
group by StartTime,EndTime
order by starttime desc
推荐阅读
- twitter-bootstrap - 自举对齐问题
- c++ - MFC:在运行时扩展
- javascript - 在 node.js 中处理 url 或图像文件数据
- ruby-on-rails - Rspec 期望接收特定的记录实例
- python - 使用python确定给定数据集的最佳k-mean
- sql - 如何在 SQL 中正确排序财政年度季度?
- c++ - 为什么我们不能将浮点值与某个数值进行比较
- laravel - 在 Laravel 共享主机上找不到驱动程序 (SQL: select * from `homes`)
- trimble-maps - “WEBGL JAVASCRIPT MAPS” React 中的集群
- jax-rs - 为什么我无法访问 JAX-RS api?