我有一張表,其中包含名稱、開始時間和持續時間。
我需要一個查詢,它會給我最后 5 個名字、開始時間和持續時間。如果有多個名稱的序列 - 應該得到序列的開頭,以及它的整體延續。
如果有多個同名序列 - 應該只獲取最后一個。
例如:
姓名 | 開始時間 | 期間 |
---|---|---|
一種 | 79431 | 70 |
一種 | 79420 | 11 |
一種 | 79415 | 5 |
b | 79413 | 1 |
C | 79300 | 112 |
C | 79298 | 2 |
b | 79296 | 2 |
C | 79288 | 6 |
C | 79284 | 3 |
C | 79278 | 347 |
d | 78400 | 200 |
d | 77764 | 636 |
e | 77759 | 4 |
d | 77741 | 17 |
F | 77700 | 7 |
一種 | 77642 | 10 |
應該:
名稱序列 | 開始時間序列 | 持續時間序列 |
---|---|---|
一種 | 79415 | 86 |
b | 79413 | 1 |
C | 79298 | 114 |
d | 77764 | 836 |
e | 77759 | 4 |
非常感謝幫助!謝謝
uj5u.com熱心網友回復:
當我們開始一個同名的新序列時,您需要定義。
我有 2 個查詢,一個將所有出現的名稱作為一個序列。如果他們跟隨在桌子上,另一個讓他們在一起。
create table table_name( name varchar(10), start_time int, duration int);
?
insert into table_name values ('a',79431,70), ('a',79420,11), ('a',79415,5), ('b',79413,1), ('c',79300,112), ('c',79298,2), ('b',79296,2), ('c',79288,6), ('c',79284,3), ('c',79278,347), ('d',78400,200), ('d',77764,636), ('e',77759,4), ('d',77741,17), ('f',77700,7), ('a',77642,10);
?
select t.name, min(start_time) beginning, sum(duration) duration from table_name t join (select distinct name from table_name order by start_time desc limit 5) n on t.name = n.name group by t.name;
姓名 | 開始| 期間 :--- | --------: | --------: 一個 | 77642 | 96 乙 | 79296 | 3 c | 79278 | 470 d | 77741 | 853 電子| 77759 | 4
select name, min(start_time) beginning, sum(duration) duration from (select name, start_time, duration, row_number() over(order by start_time) rn, row_number() over(order by start_time desc) - row_number() over(partition by name order by start_time desc) as group_number from table_name) t group by name,group_number order by group_number limit 5;
姓名 | 開始| 期間 :--- | --------: | --------: 一個 | 79415 | 86 乙 | 79413 | 1 c | 79298 | 114 乙 | 79296 | 2 c | 79278 | 356
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470346.html
上一篇:使用SQL查詢資料庫表