[英]Gap in time between dates
問題:我正在嘗試計算旅行之間的時間差距。 這是從特定自行車的一次騎行結束到特定自行車的下一次騎行開始之間的時間。
我正在使用 bigquery-public-data.new_york_citibike.citibike_trips 數據庫。 數據大致架構如下:
trip_duration、start_time、end_time、start_station_id、end_station_id、bike_id
我目前的猜測是我需要做幾個查詢:
SELECT
bk.end_time as idle_start,
bk.bike_id as id
FROM `bigquery-public-data.new_york_citibike.citibike_trips` as bk
和
SELECT
bk.start_time as idle_end,
bk.bike_id as id
FROM `bigquery-public-data.new_york_citibike.citibike_trips` as bk
然后我需要找到一種方法將它們連接在一起:
id = id 和 idle_start < idle_end
並計算一個稱為差距的新指標:
(idle_end - idle_start) 作為間隙
我對此很陌生,所以我無法提出解決方案。 我覺得這適用於連接,但我還不是很擅長。
給定的桌游:
CREATE TABLE rides (
ride_id int primary key auto_increment
, bike_id int
, stime int
, etime int
);
和數據:
INSERT INTO rides (bike_id, stime, etime) VALUES
( 1, 1, 5 )
, ( 1, 8, 15 )
, ( 1, 26, 30 )
, ( 1, 55, 56 )
, ( 2, 11, 12 )
, ( 2, 19, 25 )
, ( 1, 88, 99 )
, ( 2, 26, 28 )
, ( 3, 5, 21 )
, ( 4, 5, 21 )
, ( 4, 55, 57 )
;
找出每輛自行車每次騎行之間的差距。 我添加了邏輯來為找到的第一次騎行分配 0 的差距。 我沒有使用日期/時間,只是使用整數來表示時間段。 這可以根據需要更改為使用日期/時間和時差:
WITH gaps AS (
SELECT t.*
, stime - COALESCE(LAG(etime) OVER (PARTITION BY bike_id ORDER BY stime), stime) AS gap
FROM rides AS t
)
SELECT *
FROM gaps
ORDER BY bike_id, stime
;
結果:
+---------+---------+-------+-------+------+
| ride_id | bike_id | stime | etime | gap |
+---------+---------+-------+-------+------+
| 1 | 1 | 1 | 5 | 0 |
| 2 | 1 | 8 | 15 | 3 |
| 3 | 1 | 26 | 30 | 11 |
| 4 | 1 | 55 | 56 | 25 |
| 7 | 1 | 88 | 99 | 32 |
| 5 | 2 | 11 | 12 | 0 |
| 6 | 2 | 19 | 25 | 7 |
| 8 | 2 | 26 | 28 | 1 |
| 9 | 3 | 5 | 21 | 0 |
| 10 | 4 | 5 | 21 | 0 |
| 11 | 4 | 55 | 57 | 34 |
+---------+---------+-------+-------+------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.