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 函数,并选择获得的第一行。
我只需要提取一个帐户的最大行号。我知道这是一个分组问题。
当前数据:
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 函数,并选择获得的第一行。