Я пытаюсь понять, как делать Sum, когда мне нужно использовать только значения Max/top для периода даты. Это вроде как SQL Server: SELECT only the rows with MAX(DATE), но не совсем. Спасибо за прочтение.SQL Server 2008 Sum и выберите только Max?
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, потому что это часть старой партии данных. Более новые строки представляют собой позднюю вставку (все recordedwhen значения с одинаковыми DateTime являются одинаковыми для выпечки)
Таким образом, если новая строка была вставлена так:
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
Это выглядит великолепно. Все еще пытаясь понять, почему вы добавили предложение Where вместо добавления дополнительного условия Join, есть ли там оптимизация, которую я не вижу? – Snowy
Я полагаю, что оба будут производить один и тот же план выполнения. Мне просто было полезно использовать предложение 'where'. – Joel
Ты потрясающий. Благодарю. – Snowy