SQL Server绑定时间点基于值

时间:2017-04-26 10:07:00

标签: sql-server aggregate lag lead

我有时间点捕获的审核数据,我希望将其汇总到显示使用SQL Server 2014在一段时间内值相同的位置。

采用以下示例数据

enter image description here

我想在不使用光标的情况下将其转换为理想状态 - 您将看到输出正在记录值相同的时间段,因此,相同的值可以在不同的时间段内重复(见第3行和第6行)。

enter image description here

我一直在寻找LEAD()LAG()作为潜在的解决方案,但是我无法理解如何使这项工作能够按时间划分相同的值

任何方向都会感激不尽

2 个答案:

答案 0 :(得分:2)

如果列[value]不包含不同的数字,您可以使用此查询

 SELECT start,end,value 
 FROM (SELECT MIN(ts) start
             ,MAX(ts) end
             ,value
             ,C 
       FROM (SELECT ts
                   ,value
                   ,(ROW_NUMBER() OVER (ORDER BY ts) 
                    - ROW_NUMBER() OVER (PARTITION BY value ORDER BY ts)) C
             FROM YourTable) x
 GROUP BY value,C) y ORDER BY start

答案 1 :(得分:1)

看到你的进一步评论后,下面显然没有用......

我认为你可能会使它复杂化。如果您正在寻找每个不同值的最小和最大ts,那么您可以使用MIN& MAX和按值分组,例如

SELECT   MIN(ts) AS [Start]  ,
         MAX(ts) AS [End]    , 
         Value
FROM     Table
GROUP BY Value