2012-07-03 33 views
2

可以說,我們與這些列的表BNK_ACCT_GRP_ST:鮮明+排名在加入

Column Name       ID Pk Null? Data Type 
BNK_ACCT_GRP_ST_ID1     1   N  NUMBER (15) 
BNK_ACCT_ID       2   N  NUMBER (15) 
BNK_ACCT_GRP_ID      3   N  NUMBER (15) 
BNK_ACCT_GRP_ST_CD     4   N  NUMBER (4) 
BNK_ACGRP_ST_SRC_EVNT_TYP_CD   8   N  NUMBER (4) 
BNK_ACGRP_ST_SRC_TRAN_ID    9   N  NUMBER (15) 
FNCL_GRP_ID       10   N  NUMBER (15) 
CREN_DT        12   N  DATE 
LAST_UPD_DT       13   N  DATE 
PCSG_DT        14   N  DATE 
BNK_ACCT_GRP_ST_SEQ_NO    15   N  NUMBER (15) 

其填充bnk_accts數據:

例如#1:

BNK_ACCT_GRP_ST_ID BNK_ACCT_ID BNK_ACCT_GRP_ID BNK_ACCT_GRP_ST_CD BNK_ACGRP_ST_SRC_EVNT_TYP_CD FNCL_GRP_ID BNK_ACCT_GRP_ST_SEQ_NO 
2282    150627009 1724   4     150       111111111 2 
2283    150627009 1440   2     149       111111112 1 
1908    150627009 1725   2     134       111111111 1 
1906    150627009 1441   2     135       111111111 7 

和例子# 2:

BNK_ACCT_GRP_ST_ID BNK_ACCT_ID BNK_ACCT_GRP_ID BNK_ACCT_GRP_ST_CD BNK_ACGRP_ST_SRC_EVNT_TYP_CD FNCL_GRP_ID BNK_ACCT_GRP_ST_SEQ_NO 
2364    150275031 1435   2     114       133333333 3 
2365    150275031 1436   7     116       133333333 2 
1902    150275031 1435   1     72       133333333 2 
1903    150275031 1435   2     36       133333333 1 
1904    150275031 1436   5     74       133333333 1 

其他E:

  • BNK_ACCT_GRP_ST_ID是自動增量領域,
  • BNK_ACCT_ID是actualy銀行帳號ID,
  • BNK_ACCT_GRP_ID是GRP ID(始終增加),
  • BNK_ACCT_GRP_ST_CD,BNK_ACGRP_ST_SRC_EVNT_TYP_CD和BNK_ACGRP_ST_SRC_TRAN_ID一些ID的反式目的,
  • FNCL_GRP_ID - 在bankiing的單位信息id其中這家銀行ACC屬於

我需要什麼:創建一個查詢,以根據FNCL_GRP_ID爲每個BNK_ACCT_ID拉最新的BNK_ACCT_GRP_ID。這裏一個銀行ACC可以屬於一個或一個以上FNCL制度中的,所以查詢應返回的輸出:

例如#1:

FNCL_GRP_ID BNK_ACCT_ID BNK_ACCT_GRP_ID 
111111111 150627009 1725 
111111112 150627009 1440 

例如#2:

FNCL_GRP_ID BNK_ACCT_ID BNK_ACCT_GRP_ID 
133333333 150275031 1436 

我已經嘗試了很多東西最近,如

(select distinct BNK_ACCT_ID,FNCL_GRP_ID) join to rank() over (partiton by) 

組合,但沒有運氣。

回答

2

試試這個:

WITH BankData AS 
(
    SELECT a.*, 
      ROW_NUMBER() 
       OVER(PARTITION BY fncl_grp_id, bnk_acct_id ORDER BY bnk_acct_grp_id DESC) AS Position 
     FROM bnk_acct_grp_st a 
) 
SELECT * 
    FROM BankData 
WHERE Position = 1 
+0

Chandu,謝謝,我只是沒弄清楚,其易於使用這裏有更多的分區 – user1324100

0

@Chandu's是一個相當普遍的解決方案讓您隨心所欲拉列與最大值一起。但是如果你只輸出需要的三列(FNCL_GRP_IDBNK_ACCT_IDBNK_ACCT_GRP_ID),你也可以使用一個很好的老GROUP BY條款:

SELECT 
    FNCL_GRP_ID, 
    BNK_ACCT_ID, 
    MAX(BNK_ACCT_GRP_ID) AS BNK_ACCT_GRP_ID 
FROM BNK_ACCT_GRP_ST 
GROUP BY 
    FNCL_GRP_ID, 
    BNK_ACCT_ID