日付期間の最大値/上位値のみを使用する必要がある場合に合計を実行する方法を理解しようとしています。これはSQL Serverのようなものです: MAX(DATE) の行のみを選択しますが、正確には選択しません。読んでくれてありがとう。
declare @tbl Table ( tableid int , eventdate date, valuec char(5) , valued int , recordedwhen datetime2(3) )
insert into @tbl values ( 0 , '2012-03-22' , '11111' , 3 , '2012-03-23 17:21:01.083' )
insert into @tbl values ( 1 , '2012-03-22' , '22222' , 3 , '2012-03-23 17:21:01.083' )
insert into @tbl values ( 2 , '2012-03-22' , '22222' , 4 , '2012-03-23 18:21:01.083' )
insert into @tbl values ( 3 , '2012-03-22' , '22222' , 5 , '2012-03-23 18:21:01.083' )
select
eventdate, valuec , sum(valued) as valuedSum , recordedwhen
from
@tbl
group by eventdate, valuec, recordedwhen
私は3行を取得します。しかし、私が実際に欲しいのはこれです:
--
-- eventdate valuec valuedSum recordedwhen
-- ---------- ------ ----------- ----------------------
-- 2012-03-22 11111 3 2012-03-23 17:21:01.08
-- 2012-03-22 22222 9 2012-03-23 18:21:01.08
tableid=1 の行は必要ありません。これはデータの古いバッチの一部であるためです。新しい行は後の挿入を表します (同じ日時の記録されたすべての値は、バッチで同じです)。
したがって、新しい行が次のように挿入された場合:
insert into @tbl values ( 4 , '2012-03-22' , '22222' , 6 , '2012-03-24 18:21:01.083' )
次に、データは次のようになります。
-- eventdate valuec valuedSum recordedwhen
-- ---------- ------ ----------- ----------------------
-- 2012-03-22 11111 3 2012-03-23 17:21:01.08
-- 2012-03-22 22222 6 2012-03-24 18:21:01.08