我的数据库中有5个表,每个表都有一个名为timestamp
的{{1}}列。
我想写一个查询,从所有5个表中获取updated_at的最大值,然后取这5个返回结果的最小值。
我正在尝试编写一个子查询,该子查询将获得5个表的maximum_at的最大值,然后在查询顶部使用case语句来获取最小值。
还有其他更好的方法吗?
我使用postgres&红移
答案 0 :(得分:2)
您可以在子查询中使用union all
来获取每个表中的所有最大值,然后取出最小值
Select min(updated_at) from
(
Select max(updated_at) as updated_at from table1
Union all
Select max(updated_at) as updated_at from table2
Union all
. . .
) t;
答案 1 :(得分:1)
怎么样:
SELECT MIN(max_updated_at) as min_updated_at FROM (
SELECT MAX(updated_at) AS max_updated_at FROM table1
UNION ALL
SELECT MAX(updated_at) AS max_updated_at FROM table2
UNION ALL
SELECT MAX(updated_at) AS max_updated_at FROM table3
UNION ALL
SELECT MAX(updated_at) AS max_updated_at FROM table4
UNION ALL
SELECT MAX(updated_at) AS max_updated_at FROM table5
) AS max_updated_at_values
答案 2 :(得分:1)
试试这个
select min(maxdate) as Mindate
( select max(updated_at) as maxdate from table1
union all
select max(updated_at) from table2
union all
select max(updated_at) from table3
union all
select max(updated_at) from table4
union all
select max(updated_at) from table5 ) mintable
答案 3 :(得分:0)
你不需要使用子查询,你可以加入你的表选择最多5列,然后选择min,看看这个
select case when max(a.updated_at)>max(b.updated_at) then max(b.updated_at) end, ..... from a join b join c join d join e
但是!!!子查询将是最好的方法,因为您不需要计算同一列上的最大匹配时间