我有一張桌子叫balances. 我想獲得每個用戶的最新余額,永遠每個財政年度及其相應的更新日期。
| 姓名 | 平衡 | 財政年 | date_updated |
|---|---|---|---|
| 鮑勃 | 20 | 2021 | 2021-04-03 |
| 鮑勃 | 58 | 2019 | 2019-11-13 |
| 鮑勃 | 43 | 2019 | 2022-01-24 |
| 鮑勃 | -4 | 2019 | 2019-12-04 |
| 詹姆士 | 92 | 2021 | 2021-09-11 |
| 詹姆士 | 86 | 2021 | 2021-08-18 |
| 詹姆士 | 33 | 2019 | 2019-03-24 |
| 詹姆士 | 46 | 2019 | 2019-02-12 |
| 詹姆士 | 59 | 2019 | 2019-08-12 |
所以我想要的輸出是:
| 姓名 | 平衡 | 財政年 | date_updated |
|---|---|---|---|
| 鮑勃 | 20 | 2021 | 2021-04-03 |
| 鮑勃 | 43 | 2019 | 2022-01-24 |
| 詹姆士 | 92 | 2021 | 2021-09-11 |
| 詹姆士 | 59 | 2019 | 2019-08-12 |
我已經嘗試過了,但發現使用 max() 有時不起作用,因為我在多個列中使用它
SELECT name, max(balance), financial_year, max(date_updated)
FROM balances
group by name, financial_year
uj5u.com熱心網友回復:
select NAME
,BALANCE
,FINANCIAL_YEAR
,DATE_UPDATED
from (
select t.*
,row_number() over(partition by name, financial_year order by date_updated desc) as rn
from t
) t
where rn = 1
| 姓名 | 平衡 | FINANCIAL_YEAR | DATE_UPDATED |
|---|---|---|---|
| 鮑勃 | 43 | 2019 | 22 年 1 月 24 日 |
| 鮑勃 | 20 | 2021 | 03-APR-21 |
| 詹姆士 | 59 | 2019 | 19 年 8 月 12 日 |
| 詹姆士 | 92 | 2021 | 21 年 9 月 11 日 |
小提琴
uj5u.com熱心網友回復:
問題不在于您max()在多個列中使用,而是 max() 回傳最大值這一事實。在您的示例中,Bob 在 2019 財政年度的最高余額為 58。“最高”(最后)date_updated 為 2022-01-24,但此時余額為 43。
您正在尋找的是每個用戶在一個財政年度內最后一次更新余額時的余額,就像
SELECT b.name, b.financial_year, b.balance, b.date_updated
FROM balances b
INNER JOIN (SELECT name, financial_year, max(date_updated) last_updated
FROM balances GROUP BY name, financial_year) u
ON b.name = u.name AND b.financial_year = u.financial_year AND b.date_updated = u.last_updated;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506301.html
