You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用原生SQL语法通过联表查询获取数据表最新记录?

获取每个Post对应的最新History记录(原生SQL联表实现)

方法1:子查询筛选最新记录

先找出每个post_id对应的最新记录标识(日期或ID),再通过联表匹配完整数据:

按最新检查日期匹配

SELECT p.*, h.*
FROM post p
JOIN histories h ON p.id = h.post_id
JOIN (
    SELECT post_id, MAX(inspection_date) AS latest_inspection_date
    FROM histories
    GROUP BY post_id
) latest_h 
    ON h.post_id = latest_h.post_id 
    AND h.inspection_date = latest_h.latest_inspection_date;

按最新记录ID匹配(避免同日多条记录的歧义)

SELECT p.*, h.*
FROM post p
JOIN histories h ON p.id = h.post_id
JOIN (
    SELECT post_id, MAX(id) AS latest_history_id
    FROM histories
    GROUP BY post_id
) latest_h 
    ON h.id = latest_h.latest_history_id;

方法2:窗口函数实现(适用于MySQL 8+、PostgreSQL等支持窗口函数的数据库)

通过ROW_NUMBER()为每个post_id的记录按日期倒序排序,取排序为1的最新记录:

SELECT p.*, h.*
FROM post p
JOIN (
    SELECT *,
           ROW_NUMBER() OVER (
               PARTITION BY post_id 
               ORDER BY inspection_date DESC, id DESC
           ) AS row_rank
    FROM histories
) h ON p.id = h.post_id
WHERE h.row_rank = 1;

补充说明

  • 方法1兼容性更强,适配绝大多数数据库;
  • 方法2逻辑更灵活,可自定义排序规则(比如优先按检查日期,日期相同时按记录ID倒序)。

内容的提问来源于stack exchange,提问作者SrdjanR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:00:01