0

以下のようなデータがあります。最初のテーブルには、日付の列と、1 時間の時間枠を表す 2 つの列があります。2 番目のテーブルには、適切なウィンドウに収まるように集計して照合する必要がある日時と情報が含まれています。

declare @timetable table ( dateutc datetime , timestart time , timeend time )
insert into @timetable
select '2013-06-02 00:00:00.000' , '14:00:00.0000000' , '15:00:00.0000000' 
union all select  '2013-06-02 00:00:00.000' , '13:00:00.0000000' , '14:00:00.0000000' 
union all select '2013-06-02 00:00:00.000' , '12:00:00.0000000' , '13:00:00.0000000' 
union all select  '2013-06-02 00:00:00.000' , '11:00:00.0000000' , '12:00:00.0000000' 


declare @actiontable table ( datetimeutc datetime , parentid int , actioncount int )
insert into @actiontable 
select '2013-06-02 12:56:01.403' , 3 , 1
union all select '2013-06-02 13:15:00.000' , 3 , 1
union all select '2013-06-02 13:14:01.453' , 3 , 1
union all select '2013-06-02 13:14:01.363' , 4 , 2
union all select '2013-06-02 14:00:07.006' , 4 , 2
union all select '2013-06-02 14:00:07.006' , 4 , 2
union all select '2013-06-02 14:00:07.006' , 5 , 1
union all select '2013-06-02 15:16:01.403' , 5 , 1
union all select '2013-06-02 15:16:01.403' , 5 , 1
union all select '2013-06-02 15:16:01.403' , 5 , 2

データのセットを「結合」して、以下のようにする方法がわかりません。すべてのアイデア/ヘルプに感謝します。

ありがとう!

/*
dateutc , timestart , timeend ,  actioncount 
2013-06-02 00:00:00.000 , 14:00:00.0000000 ,    15:00:00.0000000 , 9
2013-06-02 00:00:00.000 , 13:00:00.0000000 ,    14:00:00.0000000 , 4
2013-06-02 00:00:00.000 , 12:00:00.0000000 ,    13:00:00.0000000 , 1
2013-06-02 00:00:00.000 , 11:00:00.0000000 ,    12:00:00.0000000 , 0
*/
4

1 に答える 1

4
SELECT
    t.dateutc, t.timestart, t.timeend, ISNULL(SUM(A.actioncount), 0)
FROM
    @timetable T
    LEFT JOIN
    @actiontable A ON t.dateutc + CAST(t.timestart AS datetime) <= A.datetimeutc AND A.datetimeutc < T.dateutc + CAST(t.timeend AS datetime)
GROUP BY
    t.dateutc, t.timestart, t.timeend
ORDER BY
    t.dateutc DESC, t.timestart DESC;
于 2013-06-03T14:50:09.387 に答える