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

如何查询两表中各ID的最早日期并筛选不匹配记录

问题分析与解决方法

你的需求是按ID分组,获取两张表中每个ID的最早StartDate,并筛选出这两个日期不匹配的ID,原SQL存在几个关键问题:

  • 子查询未按ID分组,取的是全表最小日期而非每个ID的最早日期
  • 直接关联两张表会产生笛卡尔积,导致数据混乱
  • group by和where条件的逻辑不符合需求,无法实现按ID对比最早日期

正确解法

我们可以先分别统计两张表中每个ID的最小StartDate,再通过ID关联这两个结果集,最后筛选出日期不相等的记录。

方法1:使用子查询关联

SELECT
    hp.ID,
    hp.historical_min_date,
    cn.country_min_date
FROM
    (SELECT ID, MIN(StartDate) AS historical_min_date
     FROM Historical_Period
     GROUP BY ID) hp
JOIN
    (SELECT ID, MIN(StartDate) AS country_min_date
     FROM CountryName
     GROUP BY ID) cn ON hp.ID = cn.ID
WHERE
    hp.historical_min_date <> cn.country_min_date;

方法2:使用CTE(公共表表达式)

WITH Historical_Min AS (
    SELECT ID, MIN(StartDate) AS historical_min_date
    FROM Historical_Period
    GROUP BY ID
),
Country_Min AS (
    SELECT ID, MIN(StartDate) AS country_min_date
    FROM CountryName
    GROUP BY ID
)
SELECT
    hm.ID,
    hm.historical_min_date,
    cm.country_min_date
FROM Historical_Min hm
JOIN Country_Min cm ON hm.ID = cm.ID
WHERE hm.historical_min_date <> cm.country_min_date;

测试结果

针对你提供的测试数据:

  • Historical_Period中ID=1的最早日期是18020101
  • CountryName中ID=1的最早日期是15161129
    执行上述SQL后,会返回这条ID=1的记录,因为两个日期不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:23