sql查询按时间对数据和订单进行分区,然后仅返回分区中的特定记录

时间:2016-08-07 20:35:03

标签: sql sql-server

所以我的意思是:数据按名称分区并按日期排序

data is partitioned by name and ordered by date

我现在想只选择每个分区中的那些行,这些行位于NO为空且GENRE为空的行之后(在提供的示例的情况下为rowNo 3之后)

因此查询结果应该返回rowNo 4和5

使用的查询:

select 
    name, no, genre, date,
    ROW_NUMBER() OVER(PARTITION BY name, genre ORDER BY date) 
from 
    sourceTable

2 个答案:

答案 0 :(得分:1)

假设每个名称只有一行,其中no和genre为null,则可以使用

select t1.* 
from tablename t1
join tablename t2 on t1.name = t2.name and t2.no is null and t2.genre is null
where t1.date > t2.date

答案 1 :(得分:0)

你为什么不这样做?

select t.*
from (select name, no, genre, date,
             ROW_NUMBER() OVER(PARTITION BY name, genre ORDER BY date) as rowno
      from sourceTable
     ) t
where rowno > 3;