通过联接两个表实现Oracle最大值
通过连接两个表实现Oracle最大值我做错了什么 tblKG:通过联接两个表实现Oracle最大值,oracle,view,Oracle,View,通过连接两个表实现Oracle最大值我做错了什么 tblKG: KG_USER KG_DATE KG_TK_NO KG_SQ_NO KG_CNG_IND --------------------------------------------------------- 123456 200820 1 1 B 123456 200820 2 1 A 123456 20
KG_USER KG_DATE KG_TK_NO KG_SQ_NO KG_CNG_IND
---------------------------------------------------------
123456 200820 1 1 B
123456 200820 2 1 A
123456 200820 3 1 A
123456 200820 4 1 I
123456 200820 4 2 F
123456 200820 4 3 I
123456 200820 4 4 F
123456 200820 4 5 I
123456 200820 4 6 F
123456 200820 4 7 A
tblKN:
KN_USER KN_DATE KN_SQ_NO KN_SEQ_NUMB
--------------------------------------------------
123456 200820 1 01
123456 200820 2 01
123456 200820 3 01
123456 200820 4 07
视图:
结果:
DATE USER KN_SEQ_NO KG_TK_NO KGCNG_IND MAX_SEQ_NO
200820 123456 1 1 B 1
200820 123456 2 2 A 1
200820 123456 3 3 A 1
200820 123456 4 4 A 7
200820 123456 4 4 F 6
200820 123456 4 4 I 5
预期:
DATE USER KN_SEQ_NO KG_TK_NO KGCNG_IND MAX_SEQ_NO
200820 123456 1 1 B 1
200820 123456 2 2 A 1
200820 123456 3 3 A 1
200820 123456 4 4 A 7
根据预期输出,怀疑您不需要GROUP BY的第四个变量
GROUP BY KG_TK_NO, KG_DATE, KG_USER, ->KG_CNG_IND<-
顺便说一下,您的列名有点难以使用。虽然KG_uuu前缀样式很流行,但我不觉得它有用。但是其余的名称太短。如果要获得最大值,请使用
MAX
和分组方式。但您并不真的希望这样,而是希望获得具有最大值的行
为此,您需要根据感兴趣的列对行进行排序,然后只使用第一个列
SELECT * FROM
(SELECT
KG_TK_NO,
KG_DATE,
KG_USER,
KG_CNG_IND,
KG_SEQ_NO,
RANK() OVER (PARTITION BY KG_TK_NO, KG_DATE, KG_USER
ORDER BY KG_SEQ_NO DESC) AS R
FROM KG)
WHERE R = 1
很抱歉,KN从另一个窗口进行了复制粘贴:/对不起,这是我的名字。我需要在结果中输出cng\u ind。不确定我是否遵循。您可能希望结果中包含cng_ind,但从您的预期输出来看,您不希望cng_ind在确定最大值时起作用。相反,您只希望在确定“获胜”记录后将其作为输出列返回。安格斯的答案是一种更为复杂的赢得胜利的方式。
N.KN_SEQ_NO = G.KG_TK_NO
SELECT * FROM
(SELECT
KG_TK_NO,
KG_DATE,
KG_USER,
KG_CNG_IND,
KG_SEQ_NO,
RANK() OVER (PARTITION BY KG_TK_NO, KG_DATE, KG_USER
ORDER BY KG_SEQ_NO DESC) AS R
FROM KG)
WHERE R = 1