我有两个表查询(Oracle),我们称之为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包含一个唯一的行,其上有一个SEQ号,每当表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
我只得到SEQ匹配的结果。
ID V_ORDER V_MODIFY
---- ------- -------
1234 10 10
1235 16 NULL
我真正想要的是查看最大SEQ值的结果;
ID V_ORDER V_MODIFY
---- ------- -------
1234 10 10
1235 16 21
有什么想法吗?
由于 ç
答案 0 :(得分: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