在 BigQuery 中按天对所有读数进行分组

Lew*_*yfo 1 sql timestamp group-by average google-bigquery

我是 BigQuery 的新手,所以我正在努力以一种可能有用的方式对我的数据进行分组。此时,我已将 unix 时间戳转换为日期(例如 2018-08-27 04:54:56 UTC 等...)。我每 10 分钟左右阅读一次,并且只想按日期对它们进行分组,然后对我的各个专栏取每日平均值。我认为 'group by' 然后是 'avg' 可能是前进的方向,但我不确定如何实施第一部分。到目前为止,我用来创建表的代码如下:

  SELECT TIMESTAMP_SECONDS(timestamp) as timestamp,humidity,co2,temperature,app_id
  FROM data.staging 
  where timestamp is not null
  ;
Run Code Online (Sandbox Code Playgroud)

这是我的输出的几行:

|| Timestamp              || humidity  || co2   || temperature  || app id||

||========================||===========||=======||==============||========||

||2018-08-31 13:35:50 UTC || 63.4      || 634.5 || 21.2         || office_||

||2018-08-31 14:37:20 UTC || 67.8      || 600.4 || 20.8         || office_||
Run Code Online (Sandbox Code Playgroud)

等等..

抱歉格式不正确,如果还有其他需要,我很乐意提供。谢谢你的帮助!

Gor*_*off 6

您可以将时间戳转换为日期,然后使用GROUP BY

SELECT DATE(TIMESTAMP_SECONDS(timestamp)) as dte, AVG(humidity), AVG(co2), AVG(temperature)
FROM data.staging 
WHERE timestamp is not null
GROUP BY dte
ORDER BY dte;
Run Code Online (Sandbox Code Playgroud)

请注意,日期是 UTC 日期。 DATE()需要第二个参数。我经常称之为:

SELECT DATE(TIMESTAMP_SECONDS(timestamp), 'America/New_York') as dte, 
Run Code Online (Sandbox Code Playgroud)