次を含むテーブルがあります。
DataDate Value
2010-03-01 08:31:32.000 100
2010-03-01 08:31:40.000 110
2010-03-01 08:31:42.000 95
2010-03-01 08:31:45.000 101
. .
. .
. .
値の列に現在の行と前の行の時間差を掛けて、1日の合計を合計する必要があります。
現在、10秒ごとにデータが設定されているため、クエリで簡単に変換できます。
SELECT Sum((Value/6) FROM History WHERE DataDate BETWEEN @startDate and @endDate
@startDateと@endDateは、今日の00:00:00と11:59:59の日付です。
データが10秒ごとに収集されるように設定する前に、値が変更されるたびに収集されました。時間に関して重複するエントリはありません。最小の時間差は1秒です。
読み取り間の時間間隔がわからない場合に、行間の経過時間を取得するクエリを設定するにはどうすればよいですか?
SQL Server 2005を使用しています。
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY DataDate) AS rn
FROM mytable
)
SELECT DATEDIFF(second, mc.DataDate, mp.DataDate)
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
SQL Server 2012+の場合:
SELECT DATEDIFF(second, pDataDate, dataDate)
FROM (
SELECT *,
LAG(dataDate) OVER (ORDER BY dataDate) pDataDate
FROM rows
) q
WHERE pDataDate IS NOT NULL
副選択を使用しない場合のQuassnoiのクエリの微調整は次のとおりです。
SELECT
DATEDIFF(second, LAG(dataDate) OVER (ORDER BY dataDate), dataDate)
FROM rows
WHERE LAG(dataDate) OVER (ORDER BY dataDate) IS NOT NULL