我有一个表,其中有2列startdatetime和stopdatetime。
STARTDATETIME | STOPDATETIME | ID
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 1
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 1
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 2
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 2
2019-05-05T08:00:00Z 2019-05-05T10:00:00Z 2
第二个表的一列带有eventdatetime。
EVENTDATETIME | ID | Event
2019-05-05T05:30:00Z 1 1
2019-05-05T05:45:00Z 1 1
2019-05-05T07:30:00Z 1 1
2019-05-05T07:30:00Z 2 1
2019-05-05T07:40:00Z 2 1
2019-05-05T07:50:00Z 2 1
我试图在第一个表中进行选择,并加入第二个表,其中eventdatetime介于该行之间,并获取事件的总和。我不知道该怎么做,就是要在考虑其他参数的情况下建立一个动态小组。
预期输出:
STARTDATETIME | STOPDATETIME | ID | SUM(EVENT)
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 1 2
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 1 1
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 2 0
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 2 3
2019-05-05T08:00:00Z 2019-05-05T10:00:00Z 2 0
答案 0 :(得分:1)
SELECT
r.ID
,r.STARTDATETIME
,r.STOPDATETIME
,Sum(e.EVENT) as [SUM(Event)]
FROM dbo.GroupDatetimeRanges as r
Left Join dbo.GroupDatetimeEvents as e
on r.ID = e.ID and e.EVENTDATETIME between r.STARTDATETIME and r.STOPDATETIME
Group By
r.ID
,r.STARTDATETIME
,r.STOPDATETIME
结果
ID STARTDATETIME STOPDATETIME SUM(Event)
1 2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 2
1 2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 1
2 2019-05-05T05:00:00Z 2019-05-05T06:00:00Z NULL
2 2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 3
2 2019-05-05T08:00:00Z 2019-05-05T10:00:00Z NULL
答案 1 :(得分:0)
尝试以下代码:
select
f.StartDateTime
, f.StopDateTime
, f.ID
, Qty = sum(
case
when s.EventDatetime between f.StartDateTime and f.StopDateTime
then s.Event
else 0
end)
from FirstTable f
left join SecondTable s on (s.ID = f.ID)
group by f.StartDateTime, f.StopDateTime, f.ID