SQL - 为每个外键仅选择最新记录

Luk*_*cik 3 sql greatest-n-per-group

你好,我的问题基本上是,我有一个像这样的表文件:

外键 细绳 创建时间
1 “A” 2021-11-10
2 “b” 2021-11-15
2 “C” 2021-11-18

现在我需要的是为每个不同的外键选择一个记录(字符串),并且它始终需要是最新的 created_at)

由于速度原因,我无法在选择中使用子查询。

结果应该是这样的:

外键 细绳 创建时间
1 “A” 2021-11-10
2 “C” 2021-11-18

Tim*_*sen 5

使用ROW_NUMBER

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY foreign_key
                                   ORDER BY created_at DESC) rn
    FROM yourTable t
)

SELECT foreign_key, string, created_at
FROM cte
WHERE rn = 1;
Run Code Online (Sandbox Code Playgroud)

另一种方法,使用连接:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT foreign_key, MAX(created_at) AS max_created_at
    FROM yourTable
    GROUP BY foreign_key
) t2
    ON t2.foreign_key = t1.foreign_key AND
       t2.max_created_at = t1.created_at;
Run Code Online (Sandbox Code Playgroud)