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