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

多表连接场景下获取最新日期单行数据的技术问题求助

解决多表连接中获取最新日期单行数据的问题

我明白你在关联Unit、History、Link、Station这四张表时,卡在了如何筛选出对应最新日期的单行记录上,下面给你两种实用的解决方案:

首先先明确默认的表关联逻辑(如果实际关联关系有差异,你可以调整JOIN条件):Unit.SN ↔ Link.SN,Link.ID ↔ History.ID,History.ID ↔ Station.ID

方法1:子查询先取最新日期,再关联全表

这种方式先筛选出每个SN对应的最新日期,再通过这个结果回连Unit表拿到完整记录,最后关联其余表:

SELECT 
    u.SN, 
    u.DateTime AS UnitLatestTime,
    h.ID AS HistoryID,
    s.Type,
    s.datetime AS StationTime,
    s.location
FROM Unit u
-- 子查询获取每个SN的最新DateTime
INNER JOIN (
    SELECT SN, MAX(DateTime) AS LatestDateTime
    FROM Unit
    GROUP BY SN
) latest_unit ON u.SN = latest_unit.SN AND u.DateTime = latest_unit.LatestDateTime
-- 关联其他表
INNER JOIN Link l ON u.SN = l.SN
INNER JOIN History h ON l.ID = h.ID
INNER JOIN Station s ON h.ID = s.ID;

方法2:窗口函数(更灵活,适配复杂排序场景)

如果需要同时参考多个日期字段排序,窗口函数ROW_NUMBER()会更方便。它能给每个SN分组内的记录按日期降序编号,取编号为1的就是最新那条:

SELECT 
    SN,
    UnitLatestTime,
    HistoryID,
    Type,
    StationTime,
    location
FROM (
    SELECT 
        u.SN,
        u.DateTime AS UnitLatestTime,
        h.ID AS HistoryID,
        s.Type,
        s.datetime AS StationTime,
        s.location,
        -- 按SN分组,每组内按DateTime降序排序生成序号
        ROW_NUMBER() OVER (PARTITION BY u.SN ORDER BY u.DateTime DESC) AS row_num
    FROM Unit u
    INNER JOIN Link l ON u.SN = l.SN
    INNER JOIN History h ON l.ID = h.ID
    INNER JOIN Station s ON h.ID = s.ID
) ranked_records
-- 只保留每组的第一条(最新记录)
WHERE row_num = 1;

额外提示

  • 如果你的“最新日期”指的是Station表的datetime而非Unit的DateTime,只需把排序字段改成s.datetime DESC,子查询逻辑也对应调整为取每个Station ID的最新日期即可。
  • 如果存在部分SN没有关联的History/Link/Station记录,把INNER JOIN换成LEFT JOIN就能保留这些SN的记录(对应关联表字段会显示为NULL)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:09