テーブルから2つの日付の間の分数の合計を重複せずに計算したい(テーブルデータの後に以下で説明)**
**Id** **timeStart** **timeEnd** **ReaderId**
3 2019-04-11 21:50:00.00 2019-04-11 22:00:00.00 24
4 2019-04-11 22:30:00.00 2019-04-11 22:35:00.00 24
5 2019-04-11 22:31:00.00 2019-04-11 22:33:00.00 22
6 2019-04-11 21:40:00.00 2019-04-11 21:55:00.00 22
**上記のデータでわかるように、2つのリーダーがあり、すべてのレコードから合計分を取得したいと思います。たとえば、3行と6行の場合、6番目のIDでは21:40から始まり、21:55に終わり、3番目のIDでは21:50から22:00になります。したがって、21:40から22:00の間にのみカウントする必要があるため、出力は20分になります。これらの2倍をカウントしないでください(21:40-21:55)= 15 +(21:50-22:00)= 10 = 25。重複する分を1回カウントする必要があります
どうすればこれができるのかわかりません。私は2つの日付の間の時間を取得することを以下で知っていますが、重複するポイントをどのように克服できるかわかりません。
(datediff(minute, @dt_start, @dt_end))
更新:
上記の表のデータから:以下に説明するように、25分が出力になります:元のデータ
21:50 - 22:00
22:30 - 22:35
22:31 - 22:33
21:40 - 21:55
もう少し理解しやすいように再配置:
21:40 - 21:55
21:50 - 22:00
22:30 - 22:35
22:31 - 22:33
最初の2行では、時間は21:40から始まり、最大終了時間は22:00であるため、出力は20 + 5(最後の2行から)= 25分になります。
私はそれを以下のクエリで動作させるようにしました:
Declare @Terms table (Start DATETIME, Finish DATETIME)
INSERT INTO @Terms values
('2019-04-11 21:50:00.00','2019-04-11 22:00:00.00'),
('2019-04-11 22:30:00.00','2019-04-11 22:35:00.00'),
('2019-04-11 22:31:00.00','2019-04-11 22:33:00.00'), -- overlapping term
('2019-04-11 21:40:00.00','2019-04-11 21:55:00.00')
Select Minutes = sum(Minutes) From (
Select Distinct
B.DateR1
,B.DateR2
,Minutes = DateDiff(Minute,B.DateR1,B.DateR2)
From @Terms A
Cross Apply (
Select DateR1=Min(Start)
,DateR2=max(Finish)
From @Terms
Where Start <= A.Finish and Finish >= A.Start
) B
) A
ハッピーコーディング
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加