私は同様の列セットを持つ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)の最大値のようなタイムスタンプの値が必要になります。
私は同様の列セットを持つ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)の最大値のようなタイムスタンプの値が必要になります。
あなたはすべての列を持つ単一のテーブルをシミュレートする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
新しい12cフェッチの最初の行のみの構文が大好きです。 – unleashed
各テーブルから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
);
Oracleを使用している場合は、mysqlタグにタグを付けないでください。 – scaisEdge