私はいくつかの質問を検索しましたが、すべてが私の質問に正確に答えていません。そこで、ここでこの問題を提起した。私は、テーブルがあると言う 'テーブル'は、DateTime、ID、コードと期間が列です。 DateTimeには'2017-12-12 00:30:00','2017-12-12 00:30:37'
などのデータがあり、この間隔の日付に基づいて期間列をSUMする必要があります。 日時が「2017年12月12日夜12時30分○○秒」であるならば、私たちのクエリは'2017-12-12 00:00:00' to '2017-12-12 00:30:00'
間のすべてのデータを合計し、「2017年12月12日午後12時00分00秒」でそれを表示する必要があります前の半時間間隔で更新する必要があるDateTimeに基づく期間の合計
実際のテーブルデータ。
DateTime ID Code Duration
2017-12-12 00:30:00 1 12 1800
2017-12-12 00:30:37 1 12 37
2017-12-12 01:00:00 1 12 1793
2017-12-12 01:30:00 1 12 1800
2017-12-12 01:30:59 1 12 59
私はその後、予想結果は、クエリを実行する場合、私は私と一緒に持って
DateTime ID Code Duration
2017-12-12 00:00:00 1 12 1800
2017-12-12 00:30:00 1 12 1800
2017-12-12 01:00:00 1 12 1800
2017-12-12 01:30:00 1 12 59
クエリは、私が取得しています出力は、
ある SELECT
Interval=(CASE WHEN datepart(MINUTE,[DateTime]) = 0 and datepart(SS,DateTime)=0 THEN
CAST(CONVERT(VARCHAR(30),DATEADD(HOUR,-1,[DateTime]),101) + ' '+ cast(format(DATEPART(HOUR,DATEADD(HOUR,-1,[DateTime])),'0#')
as varchar)+':30:00' as DateTime)
ELSE (CAST(CONVERT(VARCHAR(30),[DateTime],101) +' ' + (case when datepart(MINUTE,[DateTime])<=30 then cast(format(DATEPART(HOUR,[DateTime]),'0#') as varchar)+':00:00'
else cast(format(DATEPART(HOUR,[DateTime]),'0#') as varchar)+':30:00' end) as DateTime)) END),
ID,Code,Duration=SUM(Duration) FROM Table
WHERE [DateTime] >= '2017-12-11 00:00:00' and [DateTime] <= '2017-12-11 23:59:59'
GROUP BY ID,Code,
(CASE WHEN datepart(MINUTE,[DateTime]) = 0 and datepart(SS,DateTime)=0 THEN
CAST(CONVERT(VARCHAR(30),DATEADD(HOUR,-1,[DateTime]),101) + ' '+ cast(format(DATEPART(HOUR,DATEADD(HOUR,-1,[DateTime])),'0#') as varchar)+':30:00' as DateTime)
ELSE (CAST(CONVERT(VARCHAR(30),[DateTime],101) +' ' + (case when datepart(MINUTE,[DateTime])<=30 then cast(format(DATEPART(HOUR,[DateTime]),'0#') as varchar)+':00:00'
else cast(format(DATEPART(HOUR,[DateTime]),'0#') as varchar)+':30:00' end) as DateTime)) END)
、以下の通りです
DateTime ID Code Duration
2017-12-12 00:00:00 1 12 1837
2017-12-12 00:30:00 1 12 1793
2017-12-12 01:00:00 1 12 1859
私がここに犯した間違いは秒の部分は分割されず、次の間隔の代わりに前の間隔に加算されます。要点は、30分間隔のDateTimeで1800秒を超えるはずがないということです。
さらに詳しい説明が必要な場合は、私がさらに明確になることをお知らせください。
クエリが機能しません。私はyyyy-mm-dd hh:mm:ss形式をチェックしたいのですが、クエリはyyyy-mm-ddしか持っていません。 –
最初の列をyyyy-mm-dd hh:mm:ssにフォーマットしてください。 –
@SathiyaKumar DateAddとDateDiffはdatetimeデータ型を返します。その式をクエリとして使用すると、地域の形式で表示されるdatetime列が返されます。 –