2016-07-26 121 views
2

我有一个表,看起来像这样:如何获得连续时间戳之间差异的BigQuery

ID DateTime 
1  5-1-16 12:25:13 
1  5-1-16 12:28:46 
2  5-1-16 12:25:18 
2  5-1-16 12:29:34 

我要找到每个ID每个连续的时间戳之间在几秒钟的差异。有没有办法在BigQuery中做到这一点?我有几千条记录。我知道我需要先隔离时间。

回答

1

试试下面

SELECT 
    ID, 
    TIMESTAMP_TO_SEC(TIMESTAMP(DateTime))-TIMESTAMP_TO_SEC(TIMESTAMP(prev_DateTime)) AS diff, 
FROM (
    SELECT 
    ID, 
    DateTime, 
    LAG(DateTime) OVER(PARTITION BY ID ORDER BY DateTime) AS prev_DateTime 
    FROM 
    (SELECT 1 AS ID, '2016-05-01 12:25:13' AS DateTime), 
    (SELECT 1 AS ID, '2016-05-01 12:28:46' AS DateTime), 
    (SELECT 2 AS ID, '2016-05-01 12:25:18' AS DateTime), 
    (SELECT 2 AS ID, '2016-05-01 12:29:34' AS DateTime) 
) 

添加

SELECT 
    ID, 
    TIMESTAMP_TO_SEC(TIMESTAMP(DateTime))-TIMESTAMP_TO_SEC(TIMESTAMP(prev_DateTime)) AS diff, 
FROM (
    SELECT 
    ID, 
    DateTime, 
    LAG(DateTime) OVER(PARTITION BY ID ORDER BY DateTime) AS prev_DateTime 
    FROM YourTable 
) 

我注意到 - 看起来像你的日期时间字段有着不同寻常的形式 - '16年5月1日12时29分34秒'
如果这是您执行上述查询时遇到的问题 - 您可以尝试下面的一个
请注意:对于此查询,您n eed to enable Standard SQL

SELECT 
    ID, 
    UNIX_SECONDS(DateTime) - UNIX_SECONDS(prev_DateTime) AS diff 
FROM (
    SELECT 
    ID, 
    DateTime, 
    LAG(DateTime) OVER(PARTITION BY ID ORDER BY DateTime) AS prev_DateTime 
    FROM (
    SELECT 
     ID, 
     PARSE_TIMESTAMP("%m-%d-%y %H:%M:%S", DateTime) AS DateTime 
    FROM YourTable 
) 
) 
+0

谢谢你的回应。但是,我有几千个ID和日期时间,如何修改此查询而不输入每个ID和日期时间? – argunaw

+0

只需在FROM之后使用您的表名。这几个选择被用作你的例子:o)看到除了回答 –