2017-03-09 9 views
1

私は同様の列セットを持つ4つのテーブルを持っています。oracle同じ列を持つ複数のテーブルから最大値を持つタイムスタンプを見つけよう

表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)の最大値のようなタイムスタンプの値が必要になります。

+0

Oracleを使用している場合は、mysqlタグにタグを付けないでください。 – scaisEdge

答えて

1

あなたはすべての列を持つ単一のテーブルをシミュレートするunion allを使用して、最大のタイムスタンプを持つ行を取ることができる:あなたは、Oracle 12cとを使用している場合、あなたはよりエレガントを使用することができ、また

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 

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    
+2

新しい12cフェッチの最初の行のみの構文が大好きです。 – unleashed

0

各テーブルからC列の最大値が必要な場合は、結果を得るには、それぞれのテーブルでMAXファンクションを使用し、次にユニオンで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 
); 
関連する問題