SQL: 跨多个表计算最大日期

SQL: Calculating the Max date across multiple tables

我正在尝试查找跨多个列(在多个表中)的最大日期。我有一个 SQL 查询,我认为它几乎可行,但很难调试它。问题是它从来没有 returns 任何东西。关于我做错了什么的任何想法?我没有收到任何错误,只有一个空行 "maxdate."

这是我的查询:

SELECT
(
    SELECT MAX(dates) FROM
    (
        SELECT dates = t1.UpdateDate
        UNION ALL
        SELECT dates = t2.UpdateDate
        UNION ALL
        SELECT dates = t3.UpdateDate
        UNION ALL
        SELECT dates = t4.UpdateDate
    ) as dateAcrossColumns
) as maxdate

FROM table1 as t1

join table2 as t2 on t1.ID = t2.ID
join table3 as t3 on t1.ID = t3.ID
join table4 as t4 on t1.ID = t4.ID
join table5 as t5 on t1.Status = t5.Status

WHERE t1.id = @param and t5.status <> 3

首先加入您使用 table 1 的 ID 和 table 3 的 ID 加入 table 2。我猜你是指 table 1 的 ID 和 table 2 的 ID?

join table2 as t2 on t1.ID = t3.ID

应该是:

join table2 as t2 on t1.ID = t2.ID

现已更改;

我试过你的查询并且它工作正常,你确定你的连接带回了任何行吗?要测试它,请将您的 SELECT 语句替换为 SELECT *,如果您没有返回任何行,那么它们将在您的连接/WHERE.

中的某处被过滤掉

如果任何表都可能没有给定@param 的任何行,(内部)连接将过滤掉所有其他表。

尝试合并日期并获取并集的最大值

WITH allDates AS (
    SELECT UpdateDate
    FROM   Table1
    WHERE  ID = @param
    UNION
    SELECT UpdateDate
    FROM   Table2
    WHERE  ID = @param
    UNION
    SELECT UpdateDate
    FROM   Table3
    WHERE  ID = @param
    UNION
    SELECT UpdateDate
    FROM   Table4
    WHERE  ID = @param
    UNION
    SELECT t5.UpdateDate
    FROM   Table5 AS t5
    JOIN   Table1 AS t1
        ON t5.Status = t1.Status
    WHERE  t1.ID = @param
)
SELECT MAX( UpdateDate ) AS MaxDate
FROM   allDates

想不出更简单的方法:)

SELECT MAX(Dates) AS RequiredDate
FROM (
    SELECT  t1.UpdateDate AS DateOne
           ,t2.UpdateDate AS DateTwo
           ,t3.UpdateDate AS DateThree
           ,t4.UpdateDate AS DateFour
    FROM table1 as t1
    join table2 as t2 on t1.ID = t2.ID
    join table3 as t3 on t1.ID = t3.ID
    join table4 as t4 on t1.ID = t4.ID
    join table5 as t5 on t1.[Status] = t5.[Status]
    WHERE t1.id = @param and t5.[Status] <> 3
    )t
  UNPIVOT (Dates FOR DateCols 
            IN (DateOne, DateTwo,DateThree,DateFour))up

我试图解决一个类似的问题,以在 MySQL 中的一组连接表中查找最后修改日期。以下使用 GREATESTMAX 的组合对我有用:

SELECT GREATEST(MAX(t1.modified), MAX(t2.modified), MAX(t3.modified),
    MAX(t4.modified)) AS lastmodified
FROM `table1` AS t1
LEFT JOIN `table2` AS t2 ON t1.id = t2.t1_id
LEFT JOIN `table3` AS t3 ON t2.id = t3.t2_id
LEFT JOIN `table4` AS t4 ON t3.id = t4.t3_id
WHERE t1.id = @param