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

合并两个日期表并标记日期来源的SQL实现需求

合并日期表并标记来源的解决方案

嘿,我来帮你搞定这个需求!咱们有两个日期表dates1和dates2,要合并所有唯一日期,还得标记每个日期是只在其中一个表,还是两个表都有,下面给你两种实用的SQL实现方法:

方法一:用FULL OUTER JOIN直接关联

这种方法逻辑直观,适合表数据量不大的情况:

SELECT 
    COALESCE(d1.Date, d2.Date) AS Date,
    CASE
        WHEN d1.Date IS NOT NULL AND d2.Date IS NOT NULL THEN 'Both'
        WHEN d1.Date IS NOT NULL THEN 'Only dates1'
        ELSE 'Only dates2'
    END AS Source
FROM dates1 d1
FULL OUTER JOIN dates2 d2 ON d1.Date = d2.Date
ORDER BY COALESCE(d1.Date, d2.Date);

代码说明:

  • COALESCE(d1.Date, d2.Date):用来取两个表中不为空的日期,确保每个日期都能被选中,不会漏掉任何一个;
  • CASE语句:通过判断两个表中日期的存在情况,给每个日期打上对应的来源标签;
  • 最后加ORDER BY是为了让结果按日期排序,看起来更规整。

方法二:用UNION ALL+分组统计

如果之后可能要扩展更多来源表,这种方法会更灵活:

WITH CombinedDates AS (
    SELECT Date, 'dates1' AS Source FROM dates1
    UNION ALL
    SELECT Date, 'dates2' AS Source FROM dates2
)
SELECT 
    Date,
    CASE
        WHEN COUNT(DISTINCT Source) = 2 THEN 'Both'
        WHEN MAX(Source) = 'dates1' THEN 'Only dates1'
        ELSE 'Only dates2'
    END AS Source
FROM CombinedDates
GROUP BY Date
ORDER BY Date;

代码说明:

  • 先通过UNION ALL把两个表的日期和各自的临时来源标签合并到一个CTE(临时结果集)里;
  • 然后按日期分组,统计每个日期的不同来源数量:如果数量是2,说明两个表都有这个日期;否则就看是哪个来源,标记对应的说明;
  • 同样最后按日期排序,让结果更清晰。

你可以根据自己的实际表数据情况选择合适的方法,两种都能满足需求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:21:14