2017-06-28 92 views
0

我在嘗試對時間戳之間的差異小於60秒的連續行(按時間戳排序)進行分組時遇到問題。如何根據計算對行進行分組?

下面是一個示例表:

user video  timestamp     time_diff 
---- -------- ----------------------- --------- 
Bob  balldrop 2017-06-01 06:00:00 UTC  null 
Bob  balldrop 2017-06-01 06:00:10 UTC  -10 
Bob  balldrop 2017-06-01 06:00:30 UTC  -20 
Bob  balldrop 2017-06-01 06:00:45 UTC  -15 
Bob  balldrop 2017-06-01 06:04:00 UTC  -195 
Bob  balldrop 2017-06-01 06:04:30 UTC  -30 
Bob  bounce  2017-06-01 06:05:00 UTC  null 
Bob  bounce  2017-06-01 06:05:20 UTC  -20 

期望的結果:

user video  timestamp     group 
---- -------- ----------------------- --------- 
Bob  balldrop 2017-06-01 06:00:00 UTC  1 
Bob  balldrop 2017-06-01 06:00:10 UTC  1 
Bob  balldrop 2017-06-01 06:00:30 UTC  1 
Bob  balldrop 2017-06-01 06:00:45 UTC  1 
Bob  balldrop 2017-06-01 06:04:00 UTC  2 
Bob  balldrop 2017-06-01 06:04:30 UTC  2 
Bob  bounce  2017-06-01 06:05:00 UTC  3 
Bob  bounce  2017-06-01 06:05:20 UTC  3 

回答

2

爲BigQuery的標準SQL - 下面玩:

#standardSQL 
WITH data AS (
    SELECT 'Bob' AS user, 'balldrop' AS video, TIMESTAMP '2017-06-01 06:00:00 UTC' AS ts UNION ALL 
    SELECT 'Bob', 'balldrop', TIMESTAMP '2017-06-01 06:00:10 UTC' UNION ALL 
    SELECT 'Bob', 'balldrop', TIMESTAMP '2017-06-01 06:00:30 UTC' UNION ALL 
    SELECT 'Bob', 'balldrop', TIMESTAMP '2017-06-01 06:00:45 UTC' UNION ALL 
    SELECT 'Bob', 'balldrop', TIMESTAMP '2017-06-01 06:04:00 UTC' UNION ALL 
    SELECT 'Bob', 'balldrop', TIMESTAMP '2017-06-01 06:04:30 UTC' UNION ALL 
    SELECT 'Bob', 'bounce', TIMESTAMP '2017-06-01 06:05:00 UTC' UNION ALL 
    SELECT 'Bob', 'bounce', TIMESTAMP '2017-06-01 06:05:20 UTC' 
) 
SELECT 
    user, video, ts, 
    SUM(diff) OVER(PARTITION BY user ORDER BY ts) AS group_number 
FROM (
    SELECT 
    user, video, ts, 
    IF(TIMESTAMP_DIFF(ts, LAG(ts) OVER(PARTITION BY user, video ORDER BY ts), SECOND) < 60, 0, 1) AS diff 
    FROM data 
) 
-- ORDER BY ts 

目前尚不清楚如何想爲不同的用戶編號組,以便PARTITION BY可以是廣告justed取決於它

+0

我希望你能回答!我簡直不敢相信這很簡單。我仍然試圖理解具有'diff' <60的行如何獲得與分區中的起始行相同的'group_number'。看起來像魔術!一如既往地感謝!從你那裏學習很多。 – dnaeye

相關問題