Sql 如何将每个“用户”的结果数限制为5,但如果第5行的立即数与连续行的立即数相同,则允许更多行?

Sql 如何将每个“用户”的结果数限制为5,但如果第5行的立即数与连续行的立即数相同,则允许更多行?,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我有一个数据库,里面有一个组织的域名、工资和工资日期。 我的问题是,我必须为每个域找到5个最高工资,但是如果第6行、第7行或更多行的值与第5行的值相同,那么第5行的数量可能会增加到更多。我试着使用窗口函数 从中选择* 选择id\u域、薪资值、薪资日期、, 密级 按id_域划分 按薪资日期描述、薪资值描述排序 作为员工的评价等级 评论排名的员工使用排名。如果你想要5+那么: select * from (select id_domain,salary_value, sal

我有一个数据库,里面有一个组织的域名、工资和工资日期。 我的问题是,我必须为每个域找到5个最高工资,但是如果第6行、第7行或更多行的值与第5行的值相同,那么第5行的数量可能会增加到更多。我试着使用窗口函数

从中选择* 选择id\u域、薪资值、薪资日期、, 密级 按id_域划分 按薪资日期描述、薪资值描述排序 作为员工的评价等级 评论排名的员工使用排名。如果你想要5+那么:

select *
from (select id_domain,salary_value,
             salary_value - lag(salary_value) over (partition by id_domain order by salary_value desc) AS diff,
             rank() over (partition by id_user order by salary_value desc) as rowrank
      from employee)as t 
     ) t
where rowrank < 6;
或:


非常感谢你,戈登。。我低估了排名:D
select *
from (select id_domain,salary_value,
             salary_value - lag(salary_value) over (partition by id_domain order by salary_value desc) AS diff,
             rank() over (partition by id_user order by salary_value desc) as rowrank
      from employee)as t 
     ) t
where rowrank < 6;
where rowrank <= 5