2013-08-22 206 views
0

我有兩個表查詢(甲骨文),讓我們稱之爲A和B.非規範化表

A 

ID SEQ 
---- ---- 
1234 1 
1235 3 

B 
ID TYPE SEQ NUM 
---- ---- --- --- 
1234 ORDER 1 10 
1234 MODIFY 1 10 
1235 ORDER 1 10 
1235 MODIFY 1 10 
1235 ORDER 2 11 
1235 MODIFY 2 21 
1235 ORDER 3 16 

所以表A中含有一種獨特的一行上有一個序列號被遞增每次的東西表B中的變化(表B行爲列出歷史表)。因此,在ID 1234的情況下沒有任何變化,因爲行被寫入所以SEQ是1並且表B上的兩行都具有SEQ 1.

但是,ID 1235自第一次寫入以來有三個變化。但在第三次更改中,只更改了ORDER的TYPE。我想要做的是用非規格化結果集表示兩個ID。就像一個樞軸。

所以,如果我要做類似的事情;

SELECT 
A.ID 
, MIN (CASE WHEN B.TYPE = 'ORDER' THEN NUM END) AS V_ORDER 
, MIN (CASE WHEN B.TYPE = 'MODIFY' THEN NUM END) AS V_MODIFY 
FROM A 
, LEFT JOIN B ON B.ID = A.ID 
AND B.SEQ = A.SEQ 
GROUP BY A.ID 

我只會得到結果在哪裏匹配。

ID V_ORDER V_MODIFY 
---- ------- ------- 
1234 10  10 
1235 16  NULL 

我真正想要的是看到最大SEQ值的結果;

ID V_ORDER V_MODIFY 
---- ------- ------- 
1234 10  10 
1235 16  21 

有什麼想法?

由於 Ç

回答

1

加入到派生表,用於選擇最大值。這是一個通用的例子。

select fred, barney, pebbles, wilma 
from flinstones join 
(select fred, max(wilma) maxwilma 
from flinstones 
were whatever 
group by fred) bedrock using (fred) 
where whatever 
and wilma = maxwilma 
+0

不錯,趕上,謝謝丹! – cbm64