选择多个值的最大值并取最小值

时间:2017-03-17 05:34:40

标签: sql postgresql amazon-redshift

我的数据库中有5个表,每个表都有一个名为timestamp的{​​{1}}列。

我想写一个查询,从所有5个表中获取updated_at的最大值,然后取这5个返回结果的最小值。

我正在尝试编写一个子查询,该子查询将获得5个表的maximum_at的最大值,然后在查询顶部使用case语句来获取最小值。

还有其他更好的方法吗?

我使用postgres&红移

4 个答案:

答案 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 

但是!!!子查询将是最好的方法,因为您不需要计算同一列上的最大匹配时间