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 |
使用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)
| 归档时间: |
|
| 查看次数: |
2997 次 |
| 最近记录: |