Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过联接两个表实现Oracle最大值_Oracle_View - Fatal编程技术网

通过联接两个表实现Oracle最大值

通过联接两个表实现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

通过连接两个表实现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   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