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

在哪里:

  • BNK_ACCT_GRP_ST_ID 是自增字段,
  • BNK_ACCT_ID 实际上是银行账户#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 - 该银行账户所属银行机构的 ID

我需要什么:创建一个查询以根据 FNCL_GRP_ID 为每个 BNK_ACCT_ID 提取最新的 BNK_ACCT_GRP_ID。这里一个银行账户可以属于一个或多个然后一个 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 ) 

但没有运气。

4

2 回答 2

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
于 2012-07-03T18:22:52.347 回答
0

@Chandu's是一个相当通用的解决方案,允许您拉出任意列以及最大值。但是,如果您只需要输出中的这三列(FNCL_GRP_ID, BNK_ACCT_ID, BNK_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
于 2012-07-03T21:24:11.063 回答