2017-06-28 66 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

相关问题