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

如何在不新增GROUP BY列的情况下获取结构最新巡检完整数据

解决方案

以下是两种可靠的实现方式,均可保证每个结构仅返回一行最新巡检记录:

方法1:窗口函数(推荐,兼容性强)

利用ROW_NUMBER()窗口函数给每个结构的巡检记录按日期倒序排名,直接筛选排名第一的记录(即最新巡检条目):

WITH RankedInspections AS (
    SELECT 
        s.*,
        i.InspectionDate,
        i.StructureIndex,
        i.Urgency,
        -- 按结构分组,巡检日期倒序排序,最新记录行号标记为1
        ROW_NUMBER() OVER (PARTITION BY s.StructureID ORDER BY i.InspectionDate DESC) AS rn
    FROM TableS s
    LEFT JOIN TableI i ON s.StructureID = i.StructureID
)
SELECT 
    -- 列出Table S需要的所有字段,例如StructureID、Name等
    StructureID,
    InspectionDate,
    StructureIndex,
    Urgency
FROM RankedInspections
WHERE rn = 1;

如果同一结构在同一天有多条巡检记录,可在ORDER BY后追加规则(比如优先取Urgency最高的),示例:ORDER BY i.InspectionDate DESC, i.Urgency DESC。

方法2:关联子查询

先通过子查询获取每个结构的最新巡检日期,再关联回巡检表提取对应字段:

SELECT 
    s.*,
    i.InspectionDate,
    i.StructureIndex,
    i.Urgency
FROM TableS s
LEFT JOIN TableI i 
    ON s.StructureID = i.StructureID
    AND i.InspectionDate = (
        -- 子查询定位当前结构的最大巡检日期
        SELECT MAX(InspectionDate) 
        FROM TableI 
        WHERE StructureID = s.StructureID
    );

注意:如果同一结构在最新巡检日期存在多条记录,此方法会返回多行,这种场景下优先选用方法1。

额外提示

  • 使用LEFT JOIN会保留Table S中所有结构,无巡检记录的结构对应的巡检字段将显示为NULL;若仅需保留有巡检记录的结构,替换为INNER JOIN即可。
  • 确保两张表的关联字段(如StructureID)匹配正确,避免关联逻辑错误导致结果异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:47:38