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

筛选关联重复记录的最新日期:多控制记录数据处理需求

解决每个Installation保留最新控制记录的SQL方案

嘿,我来帮你搞定这个需求!要从关联的installation和controle表中,筛选出每个installation对应的最新控制日期的记录,这里有几种实用的SQL实现方式,适配不同的数据库环境:

方法1:使用窗口函数(推荐,适合现代数据库)

这种方法用ROW_NUMBER()窗口函数给每个id_install下的记录按日期倒序编号,然后取编号为1的那条,就是最新的记录。代码如下:

WITH ranked_controles AS (
    SELECT 
        i.id_install,
        c.id_control,
        c.des_date_control AS date_control,
        -- 按installation分组,日期倒序排名,最新的排第1
        ROW_NUMBER() OVER (PARTITION BY i.id_install ORDER BY c.des_date_control DESC) AS rn
    FROM installation i
    JOIN controle c ON i.id_install = c.id_install
)
SELECT id_install, id_control, date_control
FROM ranked_controles
WHERE rn = 1;

执行后,针对你的示例数据,会得到:

id_install | id_control | date_control
-----------|------------|-------------
9001       | 194        | 1905-07-03

方法2:子查询关联(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以先通过子查询获取每个id_install的最大控制日期,再关联回原表拿到对应的完整记录:

SELECT i.id_install, c.id_control, c.des_date_control AS date_control
FROM installation i
JOIN controle c ON i.id_install = c.id_install
JOIN (
    -- 子查询获取每个installation的最新日期
    SELECT id_install, MAX(des_date_control) AS max_date
    FROM controle
    GROUP BY id_install
) latest ON c.id_install = latest.id_install AND c.des_date_control = latest.max_date;

这种方法同样能得到你想要的结果,而且兼容性更广。

补充说明

  • 如果存在同一个installation在同一天有多个控制记录的情况,方法1会随机保留一条(可以调整ORDER BY加入id_control DESC来指定取最大id的记录);方法2会返回所有同一天的记录,你可以根据实际需求调整。
  • 确保controle表的des_date_control字段是日期类型,这样MAX()函数和排序才能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:29