我一直在環顧四周,想知道如何進行雙人組。我有這張fees桌子:
| 姓名 | 結束日期 | 最后檢查 | 費用 |
|---|---|---|---|
| 鮑勃 | 2019-01-01 | 2020-10-11 | 42 |
| 鮑勃 | 2019-01-01 | 2020-11-25 | 41.45 |
| 鮑勃 | 2020-01-01 | 2020-12-20 | 24.32 |
| 鮑勃 | 2020-01-01 | 2021-02-03 | 29.30 |
| 山姆 | 2019-01-01 | 2020-10-11 | 27.23 |
| 山姆 | 2020-01-01 | 2020-12-20 | 23.23 |
| 山姆 | 2020-01-01 | 2020-12-27 | 320.3 |
| 山姆 | 2020-01-01 | 2021-02-03 | 320.3 |
| 賬單 | 2021-01-01 | 2021-01-01 | 28.23 |
我想通過name. 然后按 分組,end_date但僅根據 選擇最近的行last_check。所以我想要的輸出是:
| 姓名 | 結束日期 | 最后檢查 | 費用 |
|---|---|---|---|
| 鮑勃 | 2019-01-01 | 2020-11-25 | 41.45 |
| 鮑勃 | 2020-01-01 | 2021-02-03 | 29.30 |
| 山姆 | 2019-01-01 | 2020-10-11 | 27.23 |
| 山姆 | 2020-01-01 | 2021-02-03 | 320.3 |
| 賬單 | 2021-01-01 | 2021-01-01 | 28.23 |
我的表:
CREATE TABLE fees (
name varchar2(32) not null,
end_date date not null,
last_check date not null,
fee number(5, 2) not null
);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('bob', TO_DATE('2019-01-01','YYYY-MM-DD'), TO_DATE('2020-10-11','YYYY-MM-DD'), 42);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('bob', TO_DATE('2019-01-01','YYYY-MM-DD'), TO_DATE('2020-11-25','YYYY-MM-DD'), 41.45);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('bob', TO_DATE('2020-01-01','YYYY-MM-DD'), TO_DATE('2020-12-20','YYYY-MM-DD'), 24.32);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('bob', TO_DATE('2020-01-01','YYYY-MM-DD'), TO_DATE('2021-02-03','YYYY-MM-DD'), 29.3);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('sam', TO_DATE('2019-01-01','YYYY-MM-DD'), TO_DATE('2020-10-11','YYYY-MM-DD'), 27.23);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('sam', TO_DATE('2020-01-01','YYYY-MM-DD'), TO_DATE('2020-12-20','YYYY-MM-DD'), 23.23);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('sam', TO_DATE('2020-01-01','YYYY-MM-DD'), TO_DATE('2020-12-27','YYYY-MM-DD'), 320.3);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('sam', TO_DATE('2020-01-01','YYYY-MM-DD'), TO_DATE('2021-02-03','YYYY-MM-DD'), 320.3);
INSERT INTO fees (name, end_date, last_check, fee) VALUES ('bill', TO_DATE('2021-01-01','YYYY-MM-DD'), TO_DATE('2021-01-01','YYYY-MM-DD'), 28.23);
我的嘗試:
SELECT name, end_date, max(last_check), fee
from fees
GROUP BY name, end_date, fee
uj5u.com熱心網友回復:
一種方法是使用 row_number()!
如果您需要經常構建 SQL,請了解“磁區方式”……它改變了您的作業!
select
a.*
from
(
select
f.*,
row_number() over(partition by f.name, f.end_date order by f.last_check desc) as rn
from
fees f
) a where a.rn = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344745.html
下一篇:根據另一個表的值更新一個表的列值
