具有分页和排序的密集排名

时间:2014-02-06 10:19:59

标签: sql sql-server database window-functions

我在我的应用程序中使用自定义分页,所以每次我从我的数据库中获取最新的10条记录并显示在我的应用程序上。

我的问题是

我想在顶部获取最新的用户信息。

在获取信息时,每个用户都有多行,因此我使用dense_rank函数对这些记录进行分组。

例如

RRowNo   UserID  Location  CreatedOn

1       Avsih     Delhi       06-02-2014
1       Avsih     Mumbai      06-02-2014
1       Avsih     Kerala      06-02-2014
2       Nimmi     UP          06-02-2014
3       Rahul1    Delhi       06-02-2014
4       Rahul2    Mumbai      06-02-2014
5       Rahul3    Kerala      06-02-2014
6       Rahul4    UP          06-02-2014
7       Rahul5    Delhi       06-02-2014
8       Rahul6    Mumbai      06-02-2014
9       Rahul7    Kerala      06-02-2014
10      Rahul8    UP          06-02-2014
11      Rahul9    UP          07-02-2014

考虑我的表名是emp

我的查询是

select * 
from (
   select dense_rank() over (order by userid asc) as rowno,
   from emp
) as tab 
where rowno>='1' and rowno<='10'
order by Createdon desc

Rahul9是我的最新纪录(即必须是07/02/2014) 我希望该记录是最顶级的。但是通过使用该查询我不能获取 所以请帮助如何修改此查询。

2 个答案:

答案 0 :(得分:1)

我认为您希望首先使用最新createdon的用户。假设createon对所有用户都相同,请尝试:

select * 
from (select dense_rank() over (order by createdon desc, userid asc) as rowno
      from emp
     ) tab 
where rowno >= 1 and rowno <= 10
order by Createdon desc;

答案 1 :(得分:0)

子查询,例如

select * from ( select dense_rank() over (order by userid asc) as rowno, * from emp
inner join (select userid,MAX(CreatedOn) AS MaxCreatedOn FROM emp GROUP BY userid) a ON a.userid = emp.userid
) as tab where rowno>='1' and rowno<='10' order by a.MaxCreatedon desc

你在哪里获得每个用户的最新日期,然后加入那可能会有效?