【问题标题】:Dense Rank with paging and order by具有分页和排序的密集排名
【发布时间】:2014-03-03 05:26:48
【问题描述】:

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

我的问题是

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

在获取信息时,每个用户都有不止一行,所以我使用 dense_rank 函数对这些记录进行分组。

例如

RRowNo UserID Location CreatedOn 1 Avsih 德里 06-02-2014 1 Avsih 孟买 06-02-2014 1 Avsih 喀拉拉邦 06-02-2014 2 尼米向上 06-02-2014 3 Rahul1 德里 06-02-2014 4 Rahul2 孟买 06-02-2014 5 Rahul3 喀拉拉邦 06-02-2014 6 拉胡尔4 UP 06-02-2014 7 Rahul5 德里 06-02-2014 8 Rahul6 孟买 06-02-2014 9 Rahul7 喀拉拉邦 06-02-2014 10 拉胡尔8 UP 06-02-2014 11 拉胡尔9 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) 我希望该记录成为最高记录。但是通过使用该查询我无法获取 所以请帮助如何修改这个查询。

【问题讨论】:

  • 请不要将苹果(数字)与橙子(字符串)进行比较。 '1' 是一个字符值。 1 是一个数字。请为您正在使用的 DBMS 添加标签(Postgres、Oracle、...)

标签: sql sql-server database window-functions


【解决方案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;

【讨论】:

  • 是的,我首先要最近创建的记录 您的查询运行良好 感谢 Gordon,实际上我是第一次使用排名功能,所以我没有太多想法。
  • @user3278909 。 . .它们非常强大且有趣(对于像我这样的人)值得学习。
【解决方案2】:

子查询如

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

您从哪里获取每个用户的最新日期,然后加入该日期可能会奏效?

【讨论】:

  • 我执行上面的查询,两个查询都是一样的。记录 rahul9 仍然在第 11 位,即它的 rowno 必须是 11 select * from (select dense_rank() over (order by SAmple.userid asc) as rowno,a.* from SAmple inner join (select userid,MAX(CreatedOn) AS MaxCreatedOn FROM SAmple GROUP BY userid) a ON a.userid = SAmple.userid ) as tab --where rowno>='1' and rowno
  • 我没有发现 createdon 对所有用户都是一样的,抱歉。
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2012-08-30
相关资源
最近更新 更多