微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算时间戳的差异并跳过NULL

如何解决计算时间戳的差异并跳过NULL

如何跳过第一行来计算差异平均值? “WHERE”过滤器不起作用错误:WHERE 子句中不允许使用分析函数

  1. 为什么我可以用“557186”跳过第一个值?
  2. 是否可以声明“Unit”以便稍后将这个变量用于“WHERE”?
SELECT
  FORMAT_TIMESTAMP("%F",Timestamp) AS Date,FORMAT_TIMESTAMP("%r",Timestamp) AS Unit,LAG(FORMAT_TIMESTAMP("%r",Timestamp)) OVER (ORDER BY FORMAT_TIMESTAMP("%r",Timestamp)) AS CycleTimePreValue,CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64)-LAG(CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64)) OVER (ORDER BY CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64)) AS CycleTimePreValueSeconds,FROM
  `wh-lr-sk.Quality.Retouren_IMPORT`
  # WHERE (CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64))) < 1000
ORDER BY
  Unit
LIMIT
  10

NULL Value

解决方法

要“声明”单位,您可以使用 CTE(通用表表达式)。

with time_lags as (
SELECT
  FORMAT_TIMESTAMP("%F",Timestamp) AS Date,FORMAT_TIMESTAMP("%R",Timestamp) AS Unit,LAG(FORMAT_TIMESTAMP("%R",Timestamp)) OVER (ORDER BY FORMAT_TIMESTAMP("%R",Timestamp)) AS CycleTimePreValue,CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64)-LAG(CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64)) OVER (ORDER BY CAST(FORMAT_TIMESTAMP("%s",Timestamp) AS INT64)) AS CycleTimePreValueSeconds,FROM
  `wh-lr-sk.Quality.Retouren_IMPORT`
)
SELECT
    *
FROM time_lags
WHERE Unit < 1000
AND CycleTimePreValue IS NOT NULL
ORDER BY
  Unit
LIMIT
  10

要删除我刚刚添加的空值,请将 AND CycleTimePreValue IS NOT NULL 添加到 where 子句中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。