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

时间:2015-03-19 18:32:00

标签: sql sql-server database select join

我试图在多个列中找到最大日期(在多个表中)。我有一个SQL查询,我认为这几乎是可行的,但我很难调试它。问题是它永远不会返回任何东西。关于我做错了什么的任何想法?我没有收到任何错误,只是空行" 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

4 个答案:

答案 0 :(得分:4)

首先,您使用表1的ID和表3的ID加入表2。我认为你的意思是表1的ID和表2的ID?

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

应该是:

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

现在已经改变了;

我尝试了你的查询,它工作正常,你确定你的连接带回任何行吗?要对其进行测试,请将SELECT语句替换为SELECT *,如果您没有返回任何行,则会在您的联接/ WHERE中的某个位置过滤掉它们。

答案 1 :(得分:1)

如果任何表都没有给定@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

答案 2 :(得分:1)

不能想到一种更简单的方法:)

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

答案 3 :(得分:0)

我试图解决类似的问题,找到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
相关问题