这是我的表:
Select ID, sum (VALUE), DATE FROM MYTABLE group by ID, DATE order by ID, DATE desc
ID VALUE DATE
1 23 2014-05
1 25 2014-04
1 22 2014-03
2 5 2014-05
2 8 2014-04
2 3 2014-03
3 32 2014-05
3 25 2014-04
我想添加一个新列并分发'顶部(最大)DATE的值超过组(ID),并得到以下结果(!有一件事是至关重要的 - 总和函数很重,所以我不想执行它两次):
ID VALUE DATE NEW_COL
1 23 2014-05 23
1 25 2014-04 23
1 22 2014-03 23
2 5 2014-05 5
2 8 2014-04 5
2 3 2014-03 5
3 32 2014-05 32
3 25 2014-04 32
答案 0 :(得分:1)
SELECT
id, SUM(value) AS value, date,
FIRST_VALUE(SUM(value)) OVER
( PARTITION BY id
ORDER BY date DESC
) AS new_col
FROM
mytable
GROUP BY
id, date
ORDER BY
id, date DESC ;
这基本上是一种紧凑形式(您的查询,然后是第二级FIRST_VALUE
):
WITH cte AS
( SELECT
id, SUM(value) AS value, date
FROM
mytable
GROUP BY
id, date
)
SELECT
id, value, date,
FIRST_VALUE(value) OVER
( PARTITION BY id
ORDER BY date DESC
) AS new_col
FROM
cte
ORDER BY
id, date DESC ;
答案 1 :(得分:0)
drop table #t
create table #t(id int,value int,date1 varchar(15))
insert into #t values(1,23,'2014-05'),
(1,25,'2014-04'),
(1,22,'2014-03'),
(2,5,'2014-05'),
(2,8,'2014-04'),
(2,3,'2014-03'),
(3,32,'2014-05'),
(3,25,'2014-04')
select id,value,date1,newid1=FIRST_VALUE(value) over(partition by id order by date1 desc) from #t
order by id