Я пытаюсь понять, как сделать сумму, когда мне нужно использовать только максимальные / максимальные значения для периода даты. Это похоже на SQL Server: ВЫБЕРИТЕ только строки с МАКС. (ДАТА) , но не точно. Спасибо за чтение.
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
Я получаю три ряда. Но то, что я на самом деле хочу, это:
--
-- 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