也许是这样的。。。
Declare @YourTable Table ([UserId] int,[CreatedDate] datetime)
Insert Into @YourTable Values
(4,'2017-01-11 01:40:19:077')
,(4,'2017-01-11 01:40:19:437')
,(4,'2017-01-11 01:40:20:077')
,(4,'2017-01-11 01:50:19:077')
,(4,'2017-01-11 02:40:19:077')
,(4,'2017-01-11 02:40:19:437')
,(4,'2017-01-11 02:40:20:077')
,(4,'2017-01-11 02:40:20:437')
,(4,'2017-01-11 02:40:21:077')
,(4,'2017-01-11 02:40:22:077')
,(4,'2017-01-11 02:40:23:077')
,(4,'2017-01-11 03:15:19:077')
,(4,'2017-01-11 03:40:19:077')
,(4,'2017-01-11 04:40:19:077')
;with cte as (
Select *
,Flg = case when datediff(SECOND,lag(CreatedDate,1,CreatedDate) over (Partition By UserID Order by CreatedDate),CreatedDate ) >=10 then 1 else 0 end
From @YourTable
)
Select UserID
,DateR1 = min(CreatedDate)
,DateR2 = max(CreatedDate)
,RecCnt = sum(1)
From (Select *,Grp=sum(Flg) over (partition by UserID order by CreatedDate) From cte ) A
Group by UserID,Grp
退换商品
UserID DateR1 DateR2 RecCnt
4 2017-01-11 01:40:19.077 2017-01-11 01:40:20.077 3
4 2017-01-11 01:50:19.077 2017-01-11 01:50:19.077 1
4 2017-01-11 02:40:19.077 2017-01-11 02:40:23.077 7
4 2017-01-11 03:15:19.077 2017-01-11 03:15:19.077 1
4 2017-01-11 03:40:19.077 2017-01-11 03:40:19.077 1
4 2017-01-11 04:40:19.077 2017-01-11 04:40:19.077 1
如果你要执行
;with cte as (
Select *
,Flg = case when datediff(SECOND,lag(CreatedDate,1,CreatedDate) over (Partition By UserID Order by CreatedDate),CreatedDate ) >=10 then 1 else 0 end
From @YourTable
)
Select *
,Grp=sum(Flg) over (partition by UserID order by CreatedDate)
From cte
结果是:
注意Flg和Grp列。Grp列本质上是Flg列的运行总计。