Sql 如何在BigQuery中获取连续时间戳之间的差异

Sql 如何在BigQuery中获取连续时间戳之间的差异,sql,datetime,google-bigquery,Sql,Datetime,Google 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中有没有办法做到这一点?我有几千张唱片。我知道我需要先将时间与日期分开。试试下面的方法 SELECT ID, TIMESTAMP_TO_SEC(TIMESTAMP(DateTime))

我有一张这样的桌子:

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中有没有办法做到这一点?我有几千张唱片。我知道我需要先将时间与日期分开。

试试下面的方法

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)
)
增加

我注意到-看起来您的DateTime字段的格式不寻常-“5-1-16 12:29:34”
如果您在实现上述查询时遇到问题,您可以尝试下面的查询
请注意:对于此查询,您需要


谢谢你的回复。但是,我有几千个id和datetime,如何在不键入每个id和datetime的情况下修改此查询?只需在FROM之后使用表名即可。这几个选项被用作您的示例:o)参见答案的补充
 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
)
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  
  )
)