0

テーブルには、10分ごとのタイムスタンプと約20列の30000行があります。

timestamp  Col1 Col2 Col3 ... col20

timestamp10分ごとのようになります。例:18-05-2012 20:07、、18-05-2012 20:1718-05-2012 20:27

列には整数または浮動小数点データがあります。

私の質問は、データが列に記録されていないギャップと期間を見つける必要があるということです。列に値、NULL、NULL、値、値、NULLがあるとします。そして、それぞれのタイムスタンプがあります。

NULL値と期間(starttime-end time)のstarttimeとendtimeのような出力が必要です。

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]

正直なところ、これが機能するかどうかはわかりません。少し遊んでみるためのサンプルデータを提供していないからです。

hh:mm:ss形式の時間差を取得するには、stackoverflowで質問を検索します(例:これ) 。

于 2012-12-04T09:11:47.370 に答える
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
于 2012-12-04T12:16:49.000 に答える