0

我在表中有大约 30000 行,每 10 分钟有一次时间戳,大约有 20 列。

timestamp  Col1 Col2 Col3 ... col20

timestamp就像每10分钟一次。例如:18-05-2012 20:07, 18-05-2012 20:17,18-05-2012 20:27

列具有整数或浮点数据。

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

我需要像 NULL 值和持续时间(开始时间 - 结束时间)的开始时间和结束时间这样的输出。

4

2 回答 2

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 格式搜索问题的时差,例如这个.

于 2012-12-04T09:11:47.370 回答
0

我认为您应该使用 2 left joins: 来检测 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
于 2012-12-04T12:16:49.000 回答