公平的警告:我是使用SQL的新手。我通過AQT或SQL Developer在Oracle服務器上這樣做。SQL UNION ALL只包含來自'底部'表的更新條目
正如我一直沒能想到或搜索我的方式來回答,我把自己在你的手中能...
我想將數據從一個表合併(高質量數據)與來自表B(新數據)的數據相比較,使得來自B的條目僅在日期標記晚於表A可用時才包括。
這兩個表包括來自多個實體的條目,並且最新的日期標記隨着這些實體。
在一月4日,該表可能看起來像:
A____________________________ B_____________________________
entity date type value entity date type value
X 1.jan 1 1 X 1.jan 1 2
X 1.jan 0 1 X 1.jan 0 2
X 2.jan 1 1 X 2.jan 1 2
Y 1.jan 1 1 (new entry)X 3.jan 1 1
Y 3.jan 1 1 Y 1.jan 1 2
Y 3.jan 1 2
(new entry)Y 4.jan 1 1
我做了一些代碼,我希望澄清我的需要的嘗試:現在
WITH
AA AS
(SELECT entity, date, SUM(value)
FROM table_A
GROUP BY
entity,
date),
BB AS
(SELECT entity, date, SUM(value)
FROM table_B
WHERE date > ALL (SELECT date FROM AA)
GROUP BY
entity,
date
)
SELECT * FROM (SELECT * FROM AA UNION ALL SELECT * FROM BB)
,如果WHERE date > ALL (SELECT date FROM AA)
會爲每個實體單獨工作,我認爲有我需要的。
也就是說,爲每個實體我想從B.
如表A中的數據從A的所有條目,並且僅更新條目經常從B的不同(值通常校正)我不認爲我可以使用像這樣的東西:table A UNION ALL (table B MINUS table A)
?
感謝
聚合覆蓋單個日期上一個實體的所有值。使用表A,X在1. jan上有SUM(value)= 2。更重要的是:'select max(a.date)from ...'是否返回單個max_date?我想爲每個實體... – Kjetil
@Kjetil。 。 。正如我在答案中所說的,只需使用您定義的CTE來運行它。 –
我覺得有點不好意思,因爲我不知道max()可能會返回多個值。非常感謝你支持noob。 – Kjetil