簡體   English   中英

根據重疊的活動時間間隔對 SQL 行進行分組,有效從和有效到

[英]Grouping SQL rows based on overlapping active time intervals, valid from and valid to

我正在使用這個模擬數據在 bigquery 中工作:

create schema if not exists dbo;
create table if not exists dbo.player_history(team_id INT, player_id INT, active_from TIMESTAMP, active_to TIMESTAMP);
truncate table dbo.player_history;
INSERT INTO dbo.player_history VALUES(1,1,'2020-01-01', '2020-01-08');
INSERT INTO dbo.player_history VALUES(1,2,'2020-06-01', '2020-09-08');
INSERT INTO dbo.player_history VALUES(1,3,'2020-06-10', '2020-10-01');
INSERT INTO dbo.player_history VALUES(1,4,'2020-02-01', '2020-02-15');
INSERT INTO dbo.player_history VALUES(1,5,'2021-01-01', '2021-01-08');
INSERT INTO dbo.player_history VALUES(1,6,'2021-01-02', '2021-06-08');
INSERT INTO dbo.player_history VALUES(1,7,'2021-01-03', '2021-06-08');
INSERT INTO dbo.player_history VALUES(1,8,'2021-01-04', '2021-06-08');
INSERT INTO dbo.player_history VALUES(1,9,'2020-01-02', '2021-02-05');
INSERT INTO dbo.player_history VALUES(1,10,'2020-10-01', '2021-04-08');
INSERT INTO dbo.player_history VALUES(1,11,'2020-11-01', '2021-05-08');


select *
 from dbo.player_history
order by 3, 4

而我想要得到的是活躍的陣容。 output 看起來像這樣:

https://imgur.com/a/2j8HPiD(上圖)

其背后的邏輯是: ![在此處輸入圖片描述

我幾乎已經在 valid_to 和 valid_from 之間使用某種 lead(valid_from) 破解了它,並且如果它是一個新的陣容 0 則做一個將它設為 1 的情況,然后對其進行某種累積和以獲得 ID但我無法 100% 解決它……我非常絕望,不知道該去哪里找了。

**更正:陣容 4 和 5 實際上應該只是一個陣容。

正如我們在評論部分討論的那樣,鑒於一個玩家可以屬於多個陣容,您可以使用JOIN嘗試以下方法:

WITH LINEUPS AS 
    (SELECT a.*,b.player_id as b_player_id
    FROM `dbo.player_history` a
    INNER JOIN  `dbo.player_history` b on b.active_from BETWEEN a.active_from AND a.active_to
    ORDER BY 3, 4)
SELECT 
    team_id,
    ROW_NUMBER () OVER (PARTITION BY team_id ORDER BY  active_from, active_to) AS lineup_id,
    active_from, 
    active_to, 
    ARRAY_AGG(DISTINCT b_player_id) as player_ids
FROM LINEUPS 
GROUP BY team_id, active_from, active_to
ORDER BY active_from, active_to

在此處輸入圖像描述

由於 output 太長,我無法通過 Bigquery 控制台中的屏幕截圖向您展示,因此我將結果提取到 Google 表格中。 見下圖output截圖:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM