Sql oracle从具有相同列的多个表中查找具有最大值的时间戳

Sql oracle从具有相同列的多个表中查找具有最大值的时间戳,sql,oracle,select,database-design,plsql,Sql,Oracle,Select,Database Design,Plsql,我有4个具有类似列集的表 表1: a1 b1 c1 timestamp1 表2: a2 b2 c2 timestamp2 表3: a3 b3 c3 timestamp3 表4: a4 b4 c4 timestamp4 我需要的结果是,所有4个表中列(c1、c2、c3、c4)最大值的时间戳值。您可以使用union all模拟一个包含所有列的表,然后获取具有最大时间戳的行: SELECT a, b, c, timestamp FROM (SELECT a, b, c, timestmap

我有4个具有类似列集的表

表1:

a1 b1 c1 timestamp1
表2:

a2 b2 c2 timestamp2
表3:

a3 b3 c3 timestamp3
表4:

a4 b4 c4 timestamp4

我需要的结果是,所有4个表中列(c1、c2、c3、c4)最大值的时间戳值。

您可以使用
union all
模拟一个包含所有列的表,然后获取具有最大时间戳的行:

SELECT a, b, c, timestamp
FROM   (SELECT a, b, c, timestmap, 
               ROW_NUMBER() OVER (ORDER BY timestamp DESC) AS rn
        FROM   (SELECT a1 AS a, b1 AS b, c1 AS c, timestamp FROM table1
                UNION ALL
                SELECT a2 AS a, b2 AS b, c2 AS c, timestamp FROM table2
                UNION ALL
                SELECT a3 AS a, b3 AS b, c3 AS c, timestamp FROM table3
                UNION ALL
                SELECT a4 AS a, b4 AS b, c4 AS c, timestamp FROM table4))
         WHERE rn = 1
或者,如果您使用的是Oracle 12c,则可以使用更优雅的
fetch first
语法:

SELECT   a, b, c, timestamp
FROM     (SELECT a1 AS a, b1 AS b, c1 AS c, timestamp FROM table1
          UNION ALL
          SELECT a2 AS a, b2 AS b, c2 AS c, timestamp FROM table2
          UNION ALL
          SELECT a3 AS a, b3 AS b, c3 AS c, timestamp FROM table3
          UNION ALL
          SELECT a4 AS a, b4 AS b, c4 AS c, timestamp FROM table4)
ORDER BY timestamp DESC
FETCH FIRST ROW ONLY            

如果只需要每个表中C列的最大值。我们可以简单地在每个表上使用MAX functon,然后使用并集,再使用MAX来获得结果。希望这个也能满足您的要求

SELECT MAX(COL) FROM
(SELECT MAX(C1) COL FROM  TABLE1
UNION ALL
SELECT MAX(C2) FROM  TABLE2
UNION ALL
SELECT MAX(C3) FROM  TABLE3
UNION ALL
SELECT MAX(C4) FROM  TABLE4
);

如果您使用的是Oracle,则不应标记mysql。。。标记移除我喜欢新的12c仅获取第一行语法。