oracle按照2个字段分区 over(partition by A,B order by C)
2017-08-24 12:48
701 查看
整理需求
笔者的业务理解能力一般,需求按照我的理解转化为数据库逻辑之后大致这个样子的:查询出TB_LOG中不同的SYSTEM_ID对应的每日的最新一条数据, 同时连接TB_LOG, TB_INFO, TB_TYPE 这3个表查出其它需要的字段值。解决方案
解决该需求的核心是查出查询出TB_LOG中不同的SYSTEM_ID对应的每日的最新一条数据,然后根据外键再连表查询就容易多了。根据笔者的某位同事的设想,这里采用 over (PARTITION BY TB_LOG.SYSTEM_ID,TB_LOG.EXECUTE_DAY) 这2个字段的方法,这类似于 GROUP BY TB_LOG.SYSTEM_ID,TB_LOG.EXECUTE_DAY 的效果,再ORDER BY TB_LOG.CREATE_DATE DESC 按照创建时间倒排序,取ROW_NUM=1第一条数据即可。事实证明这是靠谱的,最终SQL如下。SELECT T4.*, T3.* from (SELECT T1.*, T2.* FROM (SELECT * FROM (SELECT TSL.*, row_number() over(partition by TSL.SYSTEM_ID, TSL.EXECUTE_DAY ORDER BY TSL.CREATE_DATE DESC) AS ROW_NUM FROM TB_LOG TSL -- WHERE 这里省略若干条件... ) WHERE ROW_NUM = 1) T1, TB_INFO T2 WHERE T1.SYS_SEQ_NO = T2.SEQ_NO) T3, TB_TYPE T4 where T4.SEQ_NO = T3.MONITOR_TYPE_ID -- 这里也省略若干条件...
相关文章推荐
- oracle的多字段排序去重Row_Number() Over(Partition By A, B Order By C Desc)
- Oracle 分析函数row_number() over (partition by order by ) 的 Mysql的替代方法
- Oracle - Lead() over (partition by xxx order by xxx )
- oracle 分析函数:ROW_NUMBER() OVER(PARTITION BY ID ORDER BY VERSION DESC)
- Oracle中row_number() over(partition by xxx order by xxx)的用法
- oracle分析函数sum/ration_to_report(column) over (partition by column order by column)
- Oracle使用row_number() over (partition order by)和DISTINCT去除重复记录
- Oracle之row_number() / rank() / dense_rank() / over(partition order by)序列函数
- Oracle之sum / over / partition by / order by联合使用
- oracle中查询最近的一条记录(FIRST_VALUE() OVER(PARTITION BY ORDER BY ))
- mysql 实现oracle里面row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 的方法
- Oracle中row_number() over(partition by a order b asc,c desc)的应用
- MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
- oracle 分组编号 ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN ) 的用法
- MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
- oracle去重复的列的sql row_number() over( partition by)
- oracle Rank() over(partition by XX order by XX)
- 【SQL 编程你也行】SQL Server新功能之函数:count函数(2012、2014的over partition by order by rows/range between)
- row_number() over(partition by xxx order by xxx)的用法
- MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能