2014-02-06 46 views
1

我在我的应用程序中使用自定义分页,所以每次我从我的数据库中获取最新的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是我最新的记录(即createdon必须是2014年7月2日) 我希望该记录是最高的。但通过使用该查询我不能获取 所以请帮助如何修改此查询。

+0

请不要比较苹果(数字)和橙子(字符串)。 “1”是一个字符值。 '1'是一个数字。并且请为您正在使用的DBMS添加标签(Postgres,Oracle,...) –

回答

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; 
+0

是的,我想最近创建的记录第一 您的查询工作正常 谢谢戈登, 其实我第一次使用排名功能,所以我没有糊涂的想法。 – user3278909

+0

@ user3278909。 。 。他们非常强大和有趣(对于像我这样的人)来了解。 –

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 

当你得到每个用户的最近日期,然后加入到可能做的伎俩?

+0

我执行上面的查询两个查询都是一样的。 记录rahul9仍然在第11位,即其rowno必须是11 SELECT * FROM(选择DENSE_RANK()OVER(ORDER BY SAmple.userid ASC)作为rowno,一*从样品 内加入(选择作为选项卡 - 其中rowno> ='1'和rowno <='10' order by tab.MaxCreatedon desc – user3278909

+0

我没有发现创建者对所有用户都是一样的,对不起。 –