1. 分组筛选查询:查询表中某字段筛选后的结果
要求
我有一张record表,表内字段,a,b,c,abc之间互相都是多对多的关系,其中c是时间字段,我想查询每个a,对应每个b的每个c的最新时间数据,该怎么写oracle的sql?
结果
要查询每个 a
对应的每个 b
的每个 c
的最新时间数据,可以使用 Oracle SQL 的窗口函数。具体来说,您可以使用 ROW_NUMBER()
窗口函数来给每组 a
和 b
按照 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
: 按照a
和b
进行分组。ORDER BY c DESC
: 在每个分组中,按照时间字段c
进行降序排列。ROW_NUMBER() OVER (...) AS rn
: 为每个分组内的行编号,最新的c
值将会有编号 1。WHERE rn = 1
: 只选择每个分组中c
最新的那一行。
这段 SQL 查询将返回每个 a
对应的每个 b
的最新 c
值。
评论区