sql 间隔段次数

需求: 间隔段次数 20分钟内的数据都算一次

WITH tb([time]) AS (
select ‘2015/11/30 23:53:41’ union all
select ‘2015/11/30 23:54:17’ union all
select ‘2015/11/30 23:54:22’ union all
select ‘2015/11/30 23:54:54’ union all
select ‘2015/11/30 23:56:17’ union all
select ‘2015/11/30 23:57:06’ union all
select ‘2015/11/30 23:57:45’ union all
select ‘2015/11/30 23:58:20’ union all
select ‘2015/11/30 23:58:27’ union ALL
select ‘2015/12/1 1:58:27’
)

SELECT sv.number, DATEADD(minute, sv.number*10,max(t.mintime)) AS starttime,DATEADD(minute, (sv.number+1)10,max(t.mintime)) AS EndTime
,SUM(CASE WHEN t.[time] BETWEEN DATEADD(minute, sv.number
10,t.mintime) AND DATEADD(minute, (sv.number+1)10,t.mintime) THEN 1 ELSE 0 END)
FROM MASTER.dbo.spt_values AS sv LEFT JOIN
(
SELECT * ,min([time])OVER(PARTITION BY 1) as mintime, max([time])OVER(PARTITION BY 1) AS maxtime
FROM tb
) t ON sv.[type]=‘P’
WHERE DATEADD(minute, sv.number
10,t.mintime)<=t.maxtime
GROUP BY sv.number

SELECT sv.number, DATEADD(minute, sv.number*10,max(t.mintime)) AS starttime,DATEADD(minute, (sv.number+1)10,max(t.mintime)) AS EndTime
,SUM(CASE WHEN t.[FRunTime] BETWEEN DATEADD(minute, sv.number
10,t.mintime) AND DATEADD(minute, (sv.number+1)10,t.mintime) THEN 1 ELSE 0 END)
FROM MASTER.dbo.spt_values AS sv LEFT JOIN
(
SELECT * ,min([FRunTime])OVER(PARTITION BY 1) as mintime, max([FRunTime])OVER(PARTITION BY 1) AS maxtime
FROM tRun
) t ON sv.[type]=‘P’
WHERE DATEADD(minute, sv.number
10,t.mintime)<=t.maxtime
GROUP BY sv.number

SELECT sv.number, DATEADD(minute, sv.number*10,max(t.mintime)) AS starttime,DATEADD(minute, (sv.number+1)10,max(t.mintime)) AS EndTime
,SUM(CASE WHEN t.[FRunTime] BETWEEN DATEADD(minute, sv.number
10,t.mintime) AND DATEADD(minute, (sv.number+1)10,t.mintime) THEN 1 ELSE 0 END)
FROM MASTER.dbo.spt_values AS sv LEFT JOIN
(
SELECT FRunTime ,min([FRunTime]) as mintime, max([FRunTime]) AS maxtime
FROM tRun group by FRunTime
) t ON sv.[type]=‘P’
WHERE DATEADD(minute, sv.number
10,t.mintime)<=t.maxtime
GROUP BY sv.number

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值