在 Oracle SQL 中,我有一個表
| 用戶身份 | 資質 | 日期 |
|---|---|---|
| 一 | 質量1 | 2020 年 1 月 1 日 |
| 一 | 質量2 | 2022 年 1 月 1 日 |
| 二 | 質量1 | 2021 年 1 月 1 日 |
| 三 | 質量2 | 2022 年 1 月 1 日 |
我想擁有每個用戶 ID:
- 資格數
- 最近的資格
所以對于這個例子,我想要:
| 用戶身份 | 資質 | 數數 |
|---|---|---|
| 一 | 質量2 | 2 |
| 二 | 質量1 | 1 |
| 三 | 質量2 | 1 |
我想使用這樣的東西:
select userid,
count(qualification)OVER (PARTITION BY userid) as count_qual,
MAX(qualification) OVER (PARTITION BY userid ORDER BY date desc) as qual_id
from Qualificaitons
但它為我回傳兩userid行
uj5u.com熱心網友回復:
您可以使用MAX(..) KEEP (DENSE_RANK ..)聚合功能:
SELECT userid,
MAX(qualification) KEEP (DENSE_RANK LAST ORDER BY "DATE") AS qualification,
COUNT(qualification) AS count
FROM qualifications
GROUP BY userid;
其中,對于樣本資料:
CREATE TABLE qualifications (userid, qualification, "DATE") AS
SELECT 'One', 'Qual1', DATE '2020-01-01' FROM DUAL UNION ALL
SELECT 'One', 'Qual2', DATE '2022-01-01' FROM DUAL UNION ALL
SELECT 'Two', 'Qual1', DATE '2021-01-01' FROM DUAL UNION ALL
SELECT 'Three', 'Qual2', DATE '2022-01-01' FROM DUAL;
輸出:
用戶身份 資質 數數 一 質量2 2 三 質量2 1 二 質量1 1
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以使用兩個函式來計算您想要的結果。例如:
select userid, qualification, cnt
from (
select t.*,
count(*) over(partition by userid) as cnt,
row_number() over(partition by userid order by date desc) as rn
from Qualificaitons t
) x
where rn = 1
uj5u.com熱心網友回復:
使用first_value而不是 max 作為 agg 函式。在此處閱讀檔案。
select userid, count(qualification)OVER (PARTITION BY userid) as count_qual,
first_value(qualification) OVER (PARTITION BY userid ORDER BY date desc) as qual_id
from Qualificaitons
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489466.html
