我试图在多个列中找到最大日期(在多个表中)。我有一个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
答案 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中一组连接表的最后修改日期。以下内容适用于GREATEST
和MAX
:
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