は、あなたがあなたの例から、ダミーデータでそれをテストすることができ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は3ページの(秒単位)timespentの和である上に - ちょうど2つのページに、それはあなたの質問に記載されていないように - 私は、これはちょうどあなたの側にタイプミスされたと仮定し