我有以下 Oracle 表
| 個人ID | 訪問過 |
|---|---|
| 1 | 2017 年 1 月 1 日 |
| 1 | 2018 年 1 月 1 日 |
| 1 | 2019 年 1 月 1 日 |
| 1 | 2020 年 1 月 1 日 |
| 1 | 2020 年 2 月 1 日 |
| 1 | 2020 年 3 月 1 日 |
| 1 | 2021 年 5 月 1 日 |
| 1 | 2022 年 6 月 1 日 |
| 2 | 2015 年 1 月 1 日 |
| 2 | 2017 年 1 月 1 日 |
| 2 | 2018 年 1 月 1 日 |
| 2 | 2019 年 1 月 1 日 |
| 2 | 2020 年 1 月 1 日 |
| 2 | 2020 年 2 月 1 日 |
| 3 | 2017 年 1 月 1 日 |
| 3 | 2018 年 1 月 1 日 |
| 3 | 2019 年 1 月 1 日 |
| 3 | 2020 年 1 月 1 日 |
| 3 | 2020 年 2 月 1 日 |
| 3 | 2020 年 3 月 1 日 |
| 3 | 2021 年 5 月 1 日 |
我嘗試撰寫一個查詢來回傳每個人的第 N 次最早的訪問。例如,如果我想回傳第 5 次最早的訪問(N=5),結果將是
| 個人ID | 訪問日期 |
|---|---|
| 1 | 2020 年 1 月 1 日 |
| 2 | 2017 年 1 月 1 日 |
| 3 | 2019 年 1 月 1 日 |
uj5u.com熱心網友回復:
我認為這會起作用:用這些資料進行測驗:
create table test (PersonID number, VisitedOn date);
insert into test values(1,'01-JAN-2000');
insert into test values(1,'01-JAN-2001');
insert into test values(1,'01-JAN-2002');
insert into test values(1,'01-JAN-2003');
insert into test values(2,'01-JAN-2000');
insert into test values(2,'01-JAN-2001');
select personid, visitedon
from (
select personid,
visitedon,
row_number() over ( partition by personid order by visitedon ) rn
from test
)
where rn=5
這樣做是使用分析函式為按人員 ID 磁區的每組記錄分配一個行號,然后從每個磁區組中選擇第 N 行,其中每個組中的行按日期排序。如果您自己運行內部查詢,您將看到 row_number 的分配位置:
PERSONID VISITEDON RN
1 01-JAN-00 1
1 01-JAN-01 2
1 01-JAN-02 3
1 01-JAN-03 4
2 01-JAN-00 1
2 01-JAN-01 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/415971.html
標籤:
上一篇:排除記錄組——如果數量上升
