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

DB2跨表取最大时间戳用VALUES+MAX报SQL0104N错误如何解决

问题原因

报错是因为你写的VALUES子句构造和别名定义不符合DB2语法规范:你给VALUES整体多套了一层不必要的括号,同时临时表和列别名的写法不符合DB2要求。

解决方案

最优方案:使用GREATEST函数

DB2原生支持GREATEST函数,可以直接返回多个输入值的最大值,写法更简洁,执行效率也更高:

SELECT
    a.CUST_ID as CUSTOMER_ID,
    GREATEST(a.LST_UPDT_TS, b.LST_UPDT_TS, c.LST_UPDT_TS) as LST_UPDT_TS
FROM TableA as a
JOIN TableB as b ON b.CUST_ID = a.CUST_ID
JOIN TableC as c ON c.CUST_ID = a.CUST_ID
ORDER BY LST_UPDT_TS;

修正VALUES写法的方案

如果你确实需要用VALUES构造临时表的逻辑(比如后续要扩展更复杂的计算规则),修正后的写法如下:

SELECT
    a.CUST_ID as CUSTOMER_ID,
    (
        SELECT MAX(LST_UPDT_TS)
        FROM (
            VALUES (a.LST_UPDT_TS), (b.LST_UPDT_TS), (c.LST_UPDT_TS)
        ) AS T(LST_UPDT_TS)
    ) as LST_UPDT_TS
FROM TableA as a
JOIN TableB as b ON b.CUST_ID = a.CUST_ID
JOIN TableC as c ON c.CUST_ID = a.CUST_ID
ORDER BY LST_UPDT_TS;

核心修正点:

  • 移除了VALUES外侧多余的总括号,每个时间戳单独用括号包裹,代表临时表的三行数据
  • 临时表别名改为通用的T,列名跟随在别名后的括号中定义,符合DB2语法规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:45:08