[英]Find total duration (in minutes) between multiple rows with overlaps
我有下表:
start end
('19:48:43', '21:12:43')
('21:16:36', '21:17:36')
('21:19:22', '21:46:22')
('21:22:41', '22:03:41')
('21:23:29', '22:04:29')
考慮到重疊,我需要知道start
和end
之間的總時間(以分鍾為單位)。 鑒於上表,計算將如下所示:
end
- start
= 84 分鍾end
- start
= 1 分鍾end
和第 3 行的start
之間的差,即 45 分鍾總計 = 84 + 1 + 45 = 130 分鍾
我正在使用 SQLite。 到目前為止,我還沒有找到任何解決方案。
使用表的 2 個副本到表本身和聚合的LEFT
連接:
WITH cte AS (
SELECT DISTINCT
COALESCE(MIN(ts.start), t.start) start,
COALESCE(MAX(te.end), t.end) end
FROM tablename t
LEFT JOIN tablename ts ON t.start BETWEEN ts.start AND ts.end
LEFT JOIN tablename te ON t.end BETWEEN te.start AND te.end
GROUP BY t.start, t.end
)
SELECT SUM(strftime('%s', end) - strftime('%s', start)) / 60 total
FROM cte
或更簡單:
WITH cte AS (
SELECT DISTINCT
COALESCE(
(SELECT MIN(t2.start)
FROM tablename t2
WHERE t1.start BETWEEN t2.start AND t2.end), t1.start) start,
COALESCE(
(SELECT MAX(t2.end)
FROM tablename t2
WHERE t1.end BETWEEN t2.start AND t2.end), t1.start) end
FROM tablename t1
)
SELECT SUM(strftime('%s', end) - strftime('%s', start)) / 60 total
FROM cte
請參閱演示。
結果:
全部的 |
---|
130 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.