选择值在值之前和之后的行在一列中更改,并与下一列中值的更改相关联

时间:2017-04-13 16:12:38

标签: sql-server sql-server-2008

我有以下问题,我试图使用SQL Server 2008解决。

该表有4列
1-标识符,例如(a,a,a,b,b,c,c)
2-时间(以秒为单位)
3-值1(整数)
4-值2(浮动)

当按时间对每个标识符进行排序时,对于多行重复值1。一旦值1发生变化,在几行(范围在1到5秒之间)之后,值2会发生相应的变化。

1-检测值1何时更改并将其与值2更改时对应 2-值1变化之间的秒数差异。

我不能使用Partition by,因为Value 1和Value 2有重复值。

Identifier  TimeStamp   Value1  Value2
a           12:10:01      2      0.98
a           12:10:02      2      0.98
a           12:10:03      3      0.98
a           12:10:05      2      0.98
a           12:10:06      3      0.50
a           12:10:09      2      0.98
a           12:10:12      2      0.50
a           12:10:13      2      0.98
b           12:10:10      2      0.98
b           12:10:11      4      0.98
b           12:10:12      5      0.98
b           12:10:12      5      0.80
b           12:10:12      5      1.20

我一直在尝试以下查询,但运行时间太长。对于Value1中的每个更改,Value2都会有相应的更改。值2的变化可以在几秒钟的任何时间发生。我无法想出一种方法来关联这两个变化。

;使用Value1Change AS(
SELECT
     ROW_NUMBER()OVER(按TimeStamp排序)AS [RNum]
     ,标识
     ,T1。[TimeStamp] AS [T1 TimeStamp]
     ,T2。[TimeStamp] AS [T2 TimeStamp]
     ,T1。[Value1] AS [T1_Value 1]
     ,T2。[Value2] AS [T2_Value 1]

FROM表T1
INNER JOIN表T2 ON T1。[Identifier] = T2。[Identifier] AND T1.RNum = T2.RNum + 1
在哪里T2。[Value1]<> T1。[Value1]

选择
      VC1.Identifier
      ,VC1。[T2 TimeStamp]
      ,VC2。[T2 TimeStamp]
      ,DATEDIFF(S,VC1。[T2 TimeStamp],VC2。[T2 TimeStamp])AS [更改时间]
      ,VC1。[T1_Value 1]
      ,VC1。[T2_Value 1]

FROM ValueChange VC1
INNER JOIN ValueChange VC2 ON VC1.Unit = VC2.Unit AND VC1.RNum = VC2.RNum + 1
按VC1.RNum订购

0 个答案:

没有答案