关于特定查询的ROW_NUMBER

时间:2014-12-17 21:01:28

标签: sql-server sql-order-by row-number

我有以下数据,并且我根据年份对我的数据进行排名,执行了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

1 个答案:

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