下面是BigQuery的標準SQL
#standardSQL
SELECT
Id, Geohash, MIN(DateTime) AS StartDateTime, SUM(TimeSpent) AS TimeSpent
FROM (
SELECT
Id, Geohash, DateTime,
TIMESTAMP_DIFF(LEAD(DateTime) OVER(PARTITION BY Id ORDER BY DateTime), DateTime, SECOND) AS TimeSpent,
FIRST_VALUE(Geohash) OVER(PARTITION BY Id ORDER BY DateTime) AS FirstGeohash
FROM yourTable
)
WHERE Geohash = FirstGeohash
GROUP BY Id, Geohash
你可以從你的榜樣虛擬數據測試:
#standardSQL
WITH yourTable AS (
SELECT 286 AS Id, TIMESTAMP '2017-02-13 12:24:36 UTC' AS DateTime, 40.769230 AS Latitude, -73.01205 AS Longitude, 'abcdef' AS Geohash UNION ALL
SELECT 286, TIMESTAMP '2017-02-13 12:33:02.063 UTC', 40.769230, -73.01202, 'abcdef' UNION ALL
SELECT 286, TIMESTAMP '2017-02-13 12:33:05.063 UTC', 40.769230, -73.01202, 'cvzvvv' UNION ALL
SELECT 286, TIMESTAMP '2017-02-13 12:33:08 UTC', 40.769280, -73.01212, 'abcdef' UNION ALL
SELECT 286, TIMESTAMP '2017-02-13 12:34:29 UTC', 40.769306, -73.01207, 'hsffds' UNION ALL
SELECT 368, TIMESTAMP '2017-02-13 00:23:07.063 UTC', 33.392820, -111.8262, 'weruio' UNION ALL
SELECT 141, TIMESTAMP '2017-02-13 00:00:41 UTC', 33.287117, -111.84150, 'oqruqq'
)
SELECT
Id, Geohash, MIN(DateTime) AS StartDateTime, SUM(TimeSpent) AS TimeSpent
FROM (
SELECT
Id, Geohash, DateTime,
TIMESTAMP_DIFF(LEAD(DateTime) OVER(PARTITION BY Id ORDER BY DateTime), DateTime, SECOND) AS TimeSpent,
FIRST_VALUE(Geohash) OVER(PARTITION BY Id ORDER BY DateTime) AS FirstGeohash
FROM yourTable
)
WHERE Geohash = FirstGeohash
GROUP BY Id, Geohash
結果如下
Id Geohash StartDateTime TimeSpent
286 abcdef 2017-02-13 12:24:36 UTC 590
368 weruio 2017-02-13 00:23:07 UTC null
141 oqruqq 2017-02-13 00:00:41 UTC null
請注意:上述590是timespent的三個頁面的總和(以秒爲單位) - 不只是兩頁,因爲它是你的問題說 - 我認爲這只是錯字就在你身邊