从每个组中选择每个项目可用日期的最佳行

时间:2016-03-09 17:45:54

标签: sql sql-server-2014

我有这样的数据

Group id Date       
1   1   2015-01-01
2   1   2015-01-01
1   1   2015-02-01
2   1   2015-02-01
1   1   2015-03-01
1   2   2015-04-01
2   2   2015-04-01

想要为第2组中的每个ID选择每天的每条记录(如果有)。如果第2组行不可用,则返回该日期的第1组记录。对于每个ID,始终记录第1组。因此最终结果应为

Group id Date
2   1   2015-01-01
2   1   2015-02-01
1   1   2015-03-01
2   2   2015-04-01

2 个答案:

答案 0 :(得分:0)

使用ROW_NUMBER窗口功能

select * from
(
select row_number()over(partition by Date order by Group) as RN,*
from yourtable
) A
Where RN =1

如果Date有多个Group = 1,并且您想要返回Group = 1的所有date条记录,请使用DENSE_RANK代替{{} 1}}

答案 1 :(得分:0)

select distinct max(gid) as  gid over(partition by id,[grp_date] order by id), id,grp_date
from test
order by grp_date