Select 帐户的最大行数

Select the Max row number for an account

我只需要提取一个帐户的最大行号。我知道这是一个分组问题。

当前数据:

ACCOUNT_UID ID NAME ACADEMIC_PERIOD CAT_BY_DATE CAT_DATE MAX_ROW
abc abc Popeye 202190 CPT 9/15/2021 1
abc abc Popeye 202190 CSH 10/4/2021 2

我只需要第二行。

当前查询:

Select
A.ACCOUNT_UID,
A.ID,
A.NAME,
A.ACADEMIC_PERIOD,
A.cat_by_date,
A.Cat_date,
Max (A.row_num) max_row

From
(select RAD.ACCOUNT_UID,
RAD.ID,
RAD.NAME,
RAD.ACADEMIC_PERIOD,
listagg(RAD.CATEGORY, ', ') within group (order by RAD.CATEGORY) as cat_by_date,
trunc(RAD.TRANSACTION_DATE) as Cat_date,
ROW_NUMBER() OVER (partition by RAD.ACCOUNT_UID ORDER BY trunc(RAD.TRANSACTION_DATE))  as 
row_num

from RAD
where RAD.ACADEMIC_PERIOD ='202190'
and RAD.CATEGORY in ('CPT', 'CSH')

group by
RAD.ACCOUNT_UID,
RAD.ID,
RAD.NAME,
RAD.ACADEMIC_PERIOD,
trunc(RAD.TRANSACTION_DATE)
order by 1 ) A

group by
A.ACCOUNT_UID,
A.ID,
A.NAME,
A.ACADEMIC_PERIOD
A.cat_by_date,
A.Cat_date

Order by 1

您可以尝试以下方法:

Select
  A.ACCOUNT_UID,
  A.ID,
  A.NAME,
  A.ACADEMIC_PERIOD,
  A.cat_by_date,
  A.Cat_date
From
  (select RAD.ACCOUNT_UID,
          RAD.ID,
          RAD.NAME,
          RAD.ACADEMIC_PERIOD,
          listagg(RAD.CATEGORY, ', ') within group (order by RAD.CATEGORY) as cat_by_date,
          trunc(RAD.TRANSACTION_DATE) as Cat_date,
          ROW_NUMBER() OVER (partition by RAD.ACCOUNT_UID ORDER BY trunc(RAD.TRANSACTION_DATE) DESC)  as rn
     from RAD
    where RAD.ACADEMIC_PERIOD ='202190'
      and RAD.CATEGORY in ('CPT', 'CSH')
    group by
          RAD.ACCOUNT_UID,
          RAD.ID,
          RAD.NAME,
          RAD.ACADEMIC_PERIOD,
          trunc(RAD.TRANSACTION_DATE)
    order by 1 ) A
Where A.rn = 1
Order by 1

想法是在每个 account_uid 中按 transaction_date 的降序应用 row_number window 函数,并选择获得的第一行。