下面是BigQuery的標準SQL
#standardSQL
SELECT
user_id,
game_id,
MIN(game_play_time) AS game_play_time
FROM (
SELECT
user_id,
game_id,
game_play_time,
SUM(step) OVER(PARTITION BY user_id, game_id ORDER BY game_play_time) AS grp
FROM (
SELECT
user_id,
game_id,
game_play_time,
CASE WHEN IFNULL(TIMESTAMP_DIFF(game_play_time, LAG(game_play_time) OVER(PARTITION BY user_id, game_id ORDER BY game_play_time), SECOND), 0) > 1 THEN 1 ELSE 0 END AS step
FROM YourTable
)
)
GROUP BY user_id, game_id, grp
-- ORDER BY user_id, game_id, grp
你可以測試它下面的虛擬數據(從例如在你的問題+幾行,以使其更通用)
#standardSQL
WITH YourTable AS(
SELECT '1234567' AS user_id, '3444432' AS game_id, TIMESTAMP('2017-05-30 12:26:57') game_play_time UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 12:26:57') UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 13:26:57') UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 13:26:57') UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 15:26:57') UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 15:26:57') UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 15:26:58') UNION ALL
SELECT '1234567', '3444432', TIMESTAMP('2017-05-30 15:26:59') UNION ALL
SELECT '9876544', '8586588', TIMESTAMP('2017-05-30 23:26:11') UNION ALL
SELECT '4638889', '8698798', TIMESTAMP('2017-05-30 15:26:58') UNION ALL
SELECT '4638889', '8698798', TIMESTAMP('2017-05-30 15:27:58')
)
SELECT
user_id,
game_id,
MIN(game_play_time) AS game_play_time
FROM (
SELECT
user_id,
game_id,
game_play_time,
SUM(step) OVER(PARTITION BY user_id, game_id ORDER BY game_play_time) AS grp
FROM (
SELECT
user_id,
game_id,
game_play_time,
CASE WHEN IFNULL(TIMESTAMP_DIFF(game_play_time, LAG(game_play_time) OVER(PARTITION BY user_id, game_id ORDER BY game_play_time), SECOND), 0) > 1 THEN 1 ELSE 0 END AS step
FROM YourTable
)
)
GROUP BY user_id, game_id, grp
-- ORDER BY user_id, game_id, grp
基於在你的問題輸入數據 - 請顯示預期的輸出! –
@MikhailBerlyant - 剛剛添加了輸出 – BrunoGG