侧边栏壁纸
博主头像
人生短短几个秋

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 20 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SQL查询语句

人生短短几个秋
2025-01-25 / 0 评论 / 0 点赞 / 17 阅读 / 0 字

1. 分组筛选查询:查询表中某字段筛选后的结果

要求

我有一张record表,表内字段,a,b,c,abc之间互相都是多对多的关系,其中c是时间字段,我想查询每个a,对应每个b的每个c的最新时间数据,该怎么写oracle的sql?

结果

要查询每个 a 对应的每个 b 的每个 c 的最新时间数据,可以使用 Oracle SQL 的窗口函数。具体来说,您可以使用 ROW_NUMBER() 窗口函数来给每组 ab 按照 c 排序,并选择最新的记录。下面是示例 SQL 语句:

SELECT a, b, c
FROM (
    SELECT 
        a, 
        b, 
        c,
        ROW_NUMBER() OVER (PARTITION BY a, b ORDER BY c DESC) AS rn
    FROM 
        record
) 
WHERE rn = 1;

解释:

  • PARTITION BY a, b: 按照 ab 进行分组。
  • ORDER BY c DESC: 在每个分组中,按照时间字段 c 进行降序排列。
  • ROW_NUMBER() OVER (...) AS rn: 为每个分组内的行编号,最新的 c 值将会有编号 1。
  • WHERE rn = 1: 只选择每个分组中 c 最新的那一行。

这段 SQL 查询将返回每个 a 对应的每个 b 的最新 c 值。

0

评论区