我有以下问题,我试图使用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订购