在组上分发最新日期的值

时间:2014-10-07 09:00:38

标签: sql

这是我的表:

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

2 个答案:

答案 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

sql server demo