我有以下数据,并且我根据年份对我的数据进行排名,执行了ROW_NUMBER(按YEAR的ID顺序分区)功能,如下所示。 我想根据他们最近的一年为每个id带来名字。如果这是唯一可用的数据,我想引入NULL数据,并为每个其他记录引入最新的NON NULL数据。但rownumber只允许我引入最近的名称,该名称可能为NULL。如何查询以下数据以引入最近的NON NULL名称?
ID year name rownum
10 2011 abc 1
10 2010 abc 2
11 2011 ghi 1
11 2010 ghi 1
13 2010 NULL 1
13 2009 jkl 2
14 2014 NULL 1
14 2014 mno 2
15 2015 NULL 1
我想在ID 13和14中引入名称jkl,mno,而不是在我的最终结果中引入NULLS。关于如何实现这一目标的任何建议?
我想要的输出在下面 - 我想显示ROW NUM = 1
的数据10 2011 abc
11 2011 ghi
13 2009 jkl
14 2014 mno
15 2015 NULL
答案 0 :(得分:1)
在空行之前对非空行进行排序:
select ID, year, name
from (select *,
row_number() over (partition by ID
order by case when name is null then 1 else 0 end, year desc) as RN
from #t) _
where rn = 1
另请参阅SQL Server equivalent to Oracle's NULLS FIRST?,SQL Server ORDER BY date and nulls last&