【问题标题】:SQL - 仅选择每个外键的最新记录
【发布时间】:2021-12-30 04:38:59
【问题描述】:

你好所以我的问题基本上是,我有一个表 files 像这样:

foreign_key string created_at
1 "a" 2021-11-10
2 "b" 2021-11-15
2 "c" 2021-11-18

现在我需要为每个不同的 foreign_key 选择一个记录(字符串),它总是需要是 latest (created_at)

由于速度原因,我不能在选择中使用子查询

结果应该是这样的:

foreign_key string created_at
1 "a" 2021-11-10
2 "c" 2021-11-18

【问题讨论】:

  • “由于速度原因,我不能在选择中使用子查询”您介意与性能一起分享该查询吗?
  • 您使用的是哪种 DBMS 产品? “SQL”只是所有关系数据库都使用的一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tagWhy should I tag my DBMS

标签: sql greatest-n-per-group


【解决方案1】:

使用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;

另一种方法,使用连接:

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;

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 2020-08-22
    • 1970-01-01
    • 2013-05-06
    • 2011-09-13
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多