找出行之间的时差

时间:2012-12-04 09:06:36

标签: sql sql-server-2008

表格中有大约30000行,每10分钟有一个时间戳,有20列。

timestamp  Col1 Col2 Col3 ... col20

timestamp就像每10分钟一样。例如:18-05-2012 20:0718-05-2012 20:1718-05-2012 20:27

列包含整数或浮点数据。

我的问题是:我需要找到数据未记录在列中的间隙和持续时间。假设该列具有Value,NULL,NULL,Value,Value,NULL。它有各自的时间戳。

我需要输出像NULL值和持续时间(starttime - end time)的starttime和endtime。

2 个答案:

答案 0 :(得分:1)

好的,正如我现在所理解的那样,你想要在任何列中没有记录某些东西的行之间的时差,对吗?

然后尝试一下:

SELECT
yt1.[timestamp] AS StartTime,
MIN(yt2.[timestamp]) AS EndTime,
DATEDIFF(s, yt1.[timestamp], MIN(yt2.[timestamp])) AS DifferenceInSeconds
FROM
yourTable yt1
LEFT JOIN yt2 ON yt1.[timestamp] < yt2.[timestamp]
WHERE
yt1.Col1 IS NULL
OR yt1.Col2 IS NULL
...
OR yt1.Col20 IS NULL
OR yt2.Col1 IS NULL
...
OR yt2.Col20 IS NULL 
GROUP BY yt1.[timestamp]

说实话,我不确定这是否有效,因为你没有提供样本数据来玩。

要获得有关stackoverflow的hh:mm:ss格式搜索问题的时差,例如this one

答案 1 :(得分:0)

我认为你应该使用2个左连接:检测NULL外观的开始,通常我的答案看起来很像以前的答案:

select distinct  max(table2.dt) as startTime, min(table3.dt) as endTime,  
datediff(minute, max(table2.dt), min(table3.dt)) as timeDifference
from Table_2 table1
left join Table_2 table2 on table2.dt < table1.dt 
left join Table_2 table3 on table3.dt > table1.dt
where (table3.tt1 is not NULL and table3.tt2 is not NULL)
  and (table2.tt1 is not NULL and table2.tt2 is not NULL)
  and (table1.tt1 is NULL or table1.tt2 is NULL)
  group by table1.dt, table1.id