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

SQL查询异常:需合并为单行并固定指定PRODUCT_ID

解决方案:合并UNION结果并固定PRODUCT_ID

问题根源

原SQL通过UNION合并了两组不同PRODUCT_ID的聚合结果,导致返回两行数据;需求要求取所有符合条件记录的最大结算日期,且PRODUCT_ID固定为硬编码值324770793,与关联表中的PRODUCT_ID无关。

优化后的SQL(方案一:直接整合筛选条件)

SELECT 
    MAX(SETTLEMENT_DATE) AS MAX_SETTLEMENT_DATE,
    324770793 AS PRODUCT_ID,
    book_id
FROM trade t
WHERE book_id = 212344790
  AND (
    -- 直接匹配目标PRODUCT_ID
    product_id = 324770793
    -- 匹配关联表中符合条件的PRODUCT_ID
    OR product_id IN (
        SELECT product_id 
        FROM PRODUCT_CA 
        WHERE UNDERLYING_ID = 324770793
          AND CA_TYPE IN ('REDEMPTION', 'AMORTIZATION', 'PAYDOWN', 'EXERCISE', 'EXPIRY', 'MERGER')
    )
  )
GROUP BY book_id;

逻辑说明

  • 将两个筛选条件合并到WHERE子句,一次性获取所有符合要求的trade记录
  • 直接硬编码PRODUCT_ID为指定值,无需依赖分组字段
  • 通过MAX(SETTLEMENT_DATE)获取所有符合条件记录的最大结算日期,GROUP BY book_id确保返回单行结果

优化后的SQL(方案二:处理UNION结果)

如果需要保留原查询的拆分逻辑,可通过嵌套查询合并结果:

SELECT 
    MAX(MAX_SETTLEMENT_DATE) AS MAX_SETTLEMENT_DATE,
    324770793 AS PRODUCT_ID,
    book_id
FROM (
    -- 第一部分:目标PRODUCT_ID的最大日期
    SELECT MAX(SETTLEMENT_DATE) AS MAX_SETTLEMENT_DATE, book_id
    FROM trade t 
    WHERE product_id = 324770793 
      AND book_id = 212344790 
    GROUP BY book_id
    UNION ALL
    -- 第二部分:关联表匹配的PRODUCT_ID的最大日期
    SELECT MAX(SETTLEMENT_DATE) AS MAX_SETTLEMENT_DATE, book_id
    FROM trade t 
    WHERE product_id IN (
        SELECT product_id 
        FROM PRODUCT_CA 
        WHERE UNDERLYING_ID = 324770793
          AND CA_TYPE IN ('REDEMPTION', 'AMORTIZATION', 'PAYDOWN', 'EXERCISE', 'EXPIRY', 'MERGER')
    ) 
      AND book_id = 212344790 
    GROUP BY book_id
) AS combined_results
GROUP BY book_id;

逻辑说明

  • 用UNION ALL合并两个子查询的最大日期结果(比UNION更高效,无需去重)
  • 外层查询取所有日期的最大值,硬编码PRODUCT_ID,最终返回单行结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:18:23