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

如何筛选表指定日期数据,关联另一表并匹配当日最新时间戳记录

问题核心缺陷

  • 原查询对modem_auth做LEFT JOIN后,将m.partition_region、m.partition_country过滤条件放在WHERE子句中,无匹配modem记录的车辆会被直接过滤,不符合保留所有vehicles表记录的需求
  • 关联条件中出现无来源表的save.vin_2属于笔误,实际应为筛选vehicles表的vin
  • 同一vin匹配到多条modem_auth有效区间记录时,没有做去重取最新start_time的逻辑,导致同一vin重复返回多条结果

修正后查询语句

WITH matched_modem AS (
    SELECT 
        v.vin,
        date_format(v.manufacture_date, 'yyyy-MM-dd') AS event_date,
        "Vehicle Manufactured" AS event_desc,
        m.lifecycle_mode,
        m.auth_status,
        m.start_time,
        m.end_time,
        -- 同VIN的匹配记录按start_time倒序排列,最新的排第一位
        ROW_NUMBER() OVER(PARTITION BY v.vin ORDER BY m.start_time DESC) AS rn
    FROM vehicles v
    INNER JOIN (SELECT vin, MAX(created_on) AS max_created_on FROM vehicles GROUP BY vin) v2 
        ON v.vin = v2.vin AND v.created_on = v2.max_created_on
    LEFT JOIN modem_auth m 
        ON v.vin = m.vin 
        AND date_format(v.manufacture_date, 'yyyy-MM-dd') BETWEEN TO_DATE(m.start_time) AND TO_DATE(m.end_time)
        AND m.partition_region = 'NA' 
        AND m.partition_country = 'USA'
    WHERE v.vin IN ('LMN12345', 'XYZ12345', 'ABC12345')
)
SELECT 
    vin,
    event_date,
    event_desc,
    lifecycle_mode,
    auth_status,
    start_time,
    end_time
FROM matched_modem
WHERE rn = 1

上面的语句将modem_auth的过滤条件移到LEFT JOIN关联逻辑中,无匹配记录的车辆会正常返回、对应modem字段为NULL;通过窗口函数筛选每个VIN匹配到的最新start_time的modem记录,保证每个VIN仅返回一行结果,完全符合预期输出要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:24:02