oracle按照2个字段分区 over(partition by A,B order by C)
发布日期:2022-03-03 10:44:12 浏览次数:3 分类:技术文章

本文共 935 字,大约阅读时间需要 3 分钟。

整理需求

笔者的业务理解能力一般,需求按照我的理解转化为数据库逻辑之后大致这个样子的:查询出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-- 这里也省略若干条件...

转载地址:https://blog.csdn.net/yangjiegang8/article/details/77528713 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:selenium.common.exceptions.WebDriverException: Message: Missing 'type' parameter
下一篇:selenium以及selenium driver对应各主流浏览器版本小结(计划持续更新)

发表评论

最新留言

很好
[***.229.124.182]2024年03月26日 05时26分33秒