T-SQL将时间间隔更改按SQL server中的日期范围分组
原始表具有带间隔的列时间戳 间隔:按时间戳本身排序时,当前时间戳与上一个时间戳之间的分钟差T-SQL将时间间隔更改按SQL server中的日期范围分组,sql,sql-server,max,aggregate-functions,min,Sql,Sql Server,Max,Aggregate Functions,Min,原始表具有带间隔的列时间戳 间隔:按时间戳本身排序时,当前时间戳与上一个时间戳之间的分钟差 Timestamp Interval(InMinute) 2016-12-31 00:28:00 NULL 2016-12-31 00:29:00 1 2016-12-31 00:30:00 1 2016-12-31 00:45:00 15 2016-12-31 01:00:00 15 2016-12-31 01:15:00 15
Timestamp Interval(InMinute)
2016-12-31 00:28:00 NULL
2016-12-31 00:29:00 1
2016-12-31 00:30:00 1
2016-12-31 00:45:00 15
2016-12-31 01:00:00 15
2016-12-31 01:15:00 15
2016-12-31 01:16:00 1
2016-12-31 01:17:00 1
2016-12-31 01:18:00 1
2016-12-31 01:19:00 1
我想使用T-SQL检测时间间隔的变化并生成输出
StartDate EndDate Interval
2016-12-31 00:28:00 2016-12-31 00:30:00 1
2016-12-31 00:30:00 2016-12-31 01:15:00 15
2016-12-31 01:15:00 2016-12-31 01:19:00 1
我想告诉你一个间隔保持了多久。第二行表示从2016-12-31 00:30:00
到2016-12-31 01:15:00
,间隔保持不变,即15。但是在2016-12-31 01:15:00之后,它又变回了1
declare @tbl table
(datec datetime)
insert into @tbl
select '2016-12-31 00:29:00'
union all
select '2016-12-31 00:30:00'
union all
select '2016-12-31 00:45:00'
union all
select '2016-12-31 01:00:00'
union all
select '2016-12-31 01:01:00'
union all
select '2016-12-31 01:02:00'
select datec,nextdatec,datediff(MINUTE,datec,nextdatec) as diff from (
select datec,LEAD(datec) over(order by datec) as nextdatec from @tbl
) tbl
where datediff(MINUTE,datec,nextdatec) is not null
这会奏效的
CREATE TABLE ##T1 (DATE_STAMP DATETIME)
INSERT INTO ##T1 VALUES ('12-31-2016 00:29:00')
INSERT INTO ##T1 VALUES ('12-31-2016 00:30:00')
INSERT INTO ##T1 VALUES ('12-31-2016 00:45:00')
INSERT INTO ##T1 VALUES ('12-31-2016 01:00:00')
INSERT INTO ##T1 VALUES ('12-31-2016 01:01:00')
INSERT INTO ##T1 VALUES ('12-31-2016 01:02:00')
SELECT ROW_NUMBER() OVER(ORDER BY DATE_STAMP) ID, * INTO ##T2 FROM ##T1
SELECT A.DATE_STAMP START_DATE
,B.DATE_STAMP END_DATE
,DATEDIFF(MINUTE, A.DATE_STAMP, B.DATE_STAMP) INTERVAL
FROM ##T2 A
INNER JOIN ##T2 B
ON B.ID = A.ID + 1
DROP TABLE ##T1, ##T2
回答
请添加您的数据结构并解释逻辑以获得所需的result@TriV我对问题进行了一点修改,为什么您在TimeStamp
表中通过2016-12-31 00:45:00
?@TriV,因为2016-12-31 00:45:00
已经包含在2016-12-31 00:30:00
和2016-12-31 01:00:00
范围内。如果您注意到,2016-12-31 01:01:00
也在最后一行range@HighAbove在显示间隔时,您希望使用什么规则?您非常接近,但是如果您比较我的期望输出和您的期望输出,它们在输出的第二行有点不同,理想间隔(我猜)应该是30分钟,但它是15分钟。选中此选项选择DATEDIFF(分钟,'2016-12-31 00:30:00','2016-12-31 01:00:00')我只想定义一个日期范围,只要时间间隔以分钟为单位发生变化。例如,2016-12-31 00:30:00
和2016-12-31 01:00:00
之间的时间间隔保持不变,为15分钟。突然,时间间隔从2016-12-31 01:00:00
变为1,直到我理解的是,例如,如果时间介于2016-12-31 00:10:00和2016-12-31 00:25:00之间,则时间间隔应为15,但如果时间介于2016-12-31 00:30:00和2016-12-31 01:05:00之间,则不应显示该时间间隔。别忘了将其Endex lol。结果与@Manish Kumar相同。选择*进入..
:-\