oracle数据库组内排序应用
程序员文章站
2024-03-20 23:37:58
...
真实场景:
公司的一个内容发布网站有一张记录日志的表,我把这张表用来记录用户浏览情况。因为一个用户对同一个内容会有多次浏览,所以表中会有多个记录。原始的表结果大致如下:
查询语句:
select * from jc_log where category=100 and url='1729' order by log_id desc;
现在的需求是,查询出以log_id进行降序的前30条记录结果,并且user_id是去重后的,也就是说user_id不能重复出现两次。
这个需求一开始让我毫无办法,直到到网上查询到组内排序的这个概念。
组内排序大概的意思是:先将数据进行分组,然后分别对每一组的数据进行排序。
组内排序语句:
select t3.*,row_number() over(partition by t3.user_id order by t3.log_id desc) row_number
from jc_log t3 where category=100 and url ='1729'
查询得到的结果如上图所示。接下来就很简单了,获取到每一组的第一个及上图数据中的row_number为1的前30条数据,然后再进行log_id排序就行了。
select t.* from (
select t3.*,row_number() over(partition by t3.user_id order by t3.log_id desc) row_number
from jc_log t3
where category=100
and url ='1729'
) t
where t.row_number = 1
and rownum <= 30
order by log_id desc
完美的根据user_id去重,然后根据log_id排序。
上一篇: NETWORK DAY04(02):Easy IP
下一篇: pytorch实现线性回归模型
推荐阅读
-
oracle数据库组内排序应用
-
星型数据库(STAR Schema) 企业应用oracle数据库设计数据仓库
-
oracle数据库排序后获取第一条数据
-
Oracle PL/SQL 中if语句的应用 博客分类: 数据库 OraclePL/SQLif
-
Oracle时间运算(日期截取及四舍五入) 博客分类: 数据库应用 OracleRoundTrunc
-
使用Docker部署oracle数据库和Tomcat应用的简单示例
-
关系型数据库基础及应用(三)——SQL查询(以Oracle为主)
-
Oracle EBS 关闭启动数据库和应用服务
-
Oracle 11g将数据库移动到不同的ASM磁盘组/修改ASM磁盘组的冗余属性
-
Oracle PL/SQL 中循环语法语句的应用 博客分类: 数据库 OraclePL/SQL循环