按日期时间进行SQL分组,最大差异为x分钟
发布时间:2020-12-12 06:32:44 所属栏目:MsSql教程 来源:网络整理
导读:我在MS SQL Server中对数据集进行分组时遇到问题. 我的桌子看起来像 # | CustomerID | SalesDate | Turnover---| ---------- | ------------------- | --------- 1 | 1 | 2016-08-09 12:15:00 | 22.50 2 | 1 | 2016-08-09 12:17:00 | 10.00 3 | 1 | 2016-08-0
我在MS SQL Server中对数据集进行分组时遇到问题.
我的桌子看起来像 # | CustomerID | SalesDate | Turnover ---| ---------- | ------------------- | --------- 1 | 1 | 2016-08-09 12:15:00 | 22.50 2 | 1 | 2016-08-09 12:17:00 | 10.00 3 | 1 | 2016-08-09 12:58:00 | 12.00 4 | 1 | 2016-08-09 13:01:00 | 55.00 5 | 1 | 2016-08-09 23:59:00 | 10.00 6 | 1 | 2016-08-10 00:02:00 | 5.00 现在,我想将SalesDate差异与下一行的行分组,最多为5分钟. 我的方法是使用DATEPART()函数获取分钟并将结果除以5: (DATEPART(MINUTE,SalesDate) / 5) 对于第1行和第2行,结果将为3,并且此处的分组将完美地工作. 所以这就是我被困住的地方.如果有人能指出我正确的方向,我真的很感激. 解决方法您希望根据它们之间的时间对相邻事务进行分组.我们的想法是分配某种分组标识符,然后将其用于聚合.这是一种方法: >识别组开始使用滞后()和日期算法. 查询如下所示: select customerid,min(salesdate),max(saledate),sum(turnover) from (select t.*,sum(case when salesdate > dateadd(minute,5,prev_salesdate) then 1 else 0 end) over (partition by customerid order by salesdate) as grp from (select t.*,lag(salesdate) over (partition by customerid order by salesdate) as prev_salesdate from t ) t ) t group by customerid,grp; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |