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

如何从两个SQL表提取唯一ID合并为一列并统计各产品最早销售日期

问题原因

你写的SQL存在多处语法和逻辑错误,missing at EOF报错的直接原因是FROM后的子查询没有指定别名,除此之外还有几个核心问题:

  • 你在子查询内部给表起的别名a、b仅在子查询范围内生效,外层SELECT直接引用a.sales_date、b.sales_date属于无效引用,外层访问不到这两个字段
  • 子查询仅返回了Member_ID字段,没有任何销售日期字段,无法做最小值计算
  • 外层聚合查询没有加GROUP BY Member_ID,不符合聚合查询的语法规范

正确写法

推荐使用UNION ALL+条件聚合的写法,逻辑清晰兼容性好,性能也优于多表关联:

CREATE TABLE merged_table AS
SELECT 
    Member_ID,
    MIN(CASE WHEN Product = 'A' THEN Sales_Date END) AS Product_A_earliest_date,
    MIN(CASE WHEN Product = 'B' THEN Sales_Date END) AS Product_B_earliest_date
FROM (
    -- 合并两张表的所有销售记录,不需要去重,聚合时会自动处理
    SELECT Member_ID, Product, Sales_Date FROM Table_1
    UNION ALL
    SELECT Member_ID, Product, Sales_Date FROM Table_2
) AS all_sales_records
GROUP BY Member_ID;

如果你的两张表确实分别固定存储A、B两类产品的记录,也可以用全外关联的写法:

CREATE TABLE merged_table AS
SELECT 
    COALESCE(a.Member_ID, b.Member_ID) AS Member_ID,
    a.min_a_date AS Product_A_earliest_date,
    b.min_b_date AS Product_B_earliest_date
FROM (
    -- 先计算每个ID的A产品最早购买日期
    SELECT Member_ID, MIN(Sales_Date) AS min_a_date FROM Table_1 GROUP BY Member_ID
) a
FULL OUTER JOIN (
    -- 再计算每个ID的B产品最早购买日期
    SELECT Member_ID, MIN(Sales_Date) AS min_b_date FROM Table_2 GROUP BY Member_ID
) b ON a.Member_ID = b.Member_ID;

补充说明

你没有错误使用UNION,只是UNION的用法不符合你当前的需求场景:UNION的作用是对两个结果集进行去重合并,你当前需求只需要合并所有记录后分组计算即可,用不需要去重的UNION ALL性能更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:42:04