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

如何用SQL按ID对比日期列并生成对应结果列?

按ID分组判断日期是否全部相同的SQL实现

你的原SQL语句存在逻辑问题,达不到需求:

  • 你按id, title, date分组,相当于把每个不同的日期单独划成一组,每组里的max(date)必然等于当前行的date,所以new_column会全显示Same,完全无法判断同一ID下的日期是否全部一致。
  • 语句里的distinct是多余的,group by已经会自动去重分组后的结果。

正确的实现思路是先按ID单独分组,判断该ID下所有日期是否一致,再把这个判断结果关联回原表的每一行:

方法一:使用CTE(通用表表达式)

WITH id_date_status AS (
    SELECT 
        id,
        -- 同一ID下最小日期等于最大日期,说明所有日期相同
        CASE WHEN MIN(date) = MAX(date) THEN 'Same' ELSE 'Different' END AS new_column
    FROM your_table
    WHERE id IN ('21','22')
    GROUP BY id
)
SELECT 
    t.id,
    t.title,
    t.date,
    s.new_column
FROM your_table t
INNER JOIN id_date_status s ON t.id = s.id
WHERE t.id IN ('21','22');

方法二:使用子查询关联

SELECT 
    t.id,
    t.title,
    t.date,
    CASE WHEN date_check.min_date = date_check.max_date THEN 'Same' ELSE 'Different' END AS new_column
FROM your_table t
INNER JOIN (
    SELECT 
        id,
        MIN(date) AS min_date,
        MAX(date) AS max_date
    FROM your_table
    WHERE id IN ('21','22')
    GROUP BY id
) date_check ON t.id = date_check.id
WHERE t.id IN ('21','22');

这两种方法都是先通过分组得到每个ID的日期一致性状态,再关联原表,让同一ID下的所有行都带上对应的Same或Different标记,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:19