返回分区的前x个

时间:2015-08-18 21:07:24

标签: sql-server tsql

我需要对我得到的行进行分区,并且只占用特定分区的前2个,只检索最后2个(基于UpdatedOn列),但返回所有行。分区将从一列(下面的列类型)创建,可能只有几个组合。

  • 一个分区的值可以为1.
  • 第二个分区的值可以为2.
  • 第三个分区的值可以为4.
  • 第四个分区将为NULL(占所有数据的> 95%)

我需要返回每个NON-NULL分区的前2个(下面的列类型)和该分区中具有NULL的分区(Type)的所有数据。

我从以下开始(它还没有运行)但是卡住了:

SELECT Sort, ROW_NUMBER() OVER (PARTITION BY u.Type ORDER BY p.UpdatedON DESC) AS RN, 
       u.Column1, u.Column2, u.Type 
FROM Table1 
INNER JOIN Table2 u 
ON u.Id = p.Id 
WHERE p.Id NOT IN (SELECT Id From Table 3 Where Id = 'x') 
ORDER BY p.Sort DESC, p.UpdatedOn DESC

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效(将MyTable替换为您实际选择的表/联接,将ID替换为结果中需要的列:

select type, updatedon, ID from
    (select *, row_number() over (partition by type order by Updatedon desc) RN from MyTable) a
where a.RN <= 2
or type is null

它与您已经非常相似 - 只是在您的初始partition附近添加了一些逻辑。

Sql Fiddle:http://sqlfiddle.com/#!6/12ecd/2/0