db2 跨表的SQL VALUES和MAX

eagi6jfj  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(163)

我遇到了一个DB2数据库查询问题。(LST_UPDT_TS)。我们需要根据这个时间戳对表进行排序,使用在三个表中的任何一个中找到的最新时间戳。据我所知,推荐的方法是使用“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 VALUE(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

从我在StackOverflow上找到的其他解决方案中可以看出,这是使用SELECT和VALUES命令的正确格式,但我得到的不是单个最大值,而是...
SQL 0104 N在“(”之后发现意外的标记“(“。预期的标记可能包括:“.联接内部左右全交叉”. SQLSTATE=42601(#-104)
任何帮助都将不胜感激。
谢谢你,谢谢你

l0oc07j2

l0oc07j21#

也许像这样的东西?

SELECT CUSTOMER_ID,MAX(LST_UPDT_TS)LST_UPDT_TS 
from(
SELECT a.CUST_ID as CUSTOMER_ID,MAX(a.LST_UPDT_TS) LST_UPDT_TS FROM TableA as a group by a.CUST_ID 
UNION
SELECT b.CUST_ID as CUSTOMER_ID,MAX(b.LST_UPDT_TS) LST_UPDT_TS FROM TableB as b group by b.CUST_ID 
UNION
SELECT c.CUST_ID as CUSTOMER_ID,MAX(c.LST_UPDT_TS) LST_UPDT_TS FROM TableC as c group by c.CUST_ID 
) d GROUP BY CUSTOMER_ID
ORDER BY 2 DESC
FETCH FIRST ROW ONLY

相关问题