2013-08-22 156 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