SQL Big Query - 如何编写应用于 INTERVAL 列的 COUNTIF 语句

SQL Big Query - How to write a COUNTIF statement applied to an INTERVAL column

我有一个间隔格式的 trip_duration 列。我想删除所有小于 90 秒的观察结果,并计算有多少观察结果符合此条件。

我当前的SQL查询是

WITH 
org_table AS (
    SELECT
    ended_at - started_at as trip_duration
    FROM `cyclistic-328701.12_month_user_data_cyclistic.20*`
)
SELECT
  COUNTIF(x < 1:30) AS false_start
FROM trip_duration AS x;

I returns 语法错误:应为“)”但在 [8:16]

得到了“:”

我也试过了

SELECT
  COUNTIF(x < "0-0 0 0:1:30") AS false_start
FROM trip_duration AS x

它 returns Table name "trip_duration" 缺少数据集,而请求中没有设置默认数据集。

我已经通读了其他问题,但未能写出解决方案。 我的第一个想法是将 trip_duration 从 INTERVAL 转换为 TIME 格式,这样 COUNT IF 语句就可以引用 TIME 格式的列而不是 INTERVAl。

~马库斯

要过滤持续时间不小于 90 秒的数据:

SELECT
  * # here is whatever field(s) you want to return
FROM
  `cyclistic-328701.12_month_user_data_cyclistic.20*`
WHERE
  TIMESTAMP_DIFF(ended_at, started_at, SECOND) > 90

您可以阅读 TIMESTAMP_DIFF 函数 here

计算出现次数:

SELECT   
  COUNTIF(TIMESTAMP_DIFF(ended_at, started_at,SECOND) < 90) AS false_start,
  COUNTIF(TIMESTAMP_DIFF(ended_at, started_at,SECOND) >= 90) AS non_false_start
FROM
  `cyclistic-328701.12_month_user_data_cyclistic.20*`

下面的例子展示了处理间隔的方法

with trip_duration  as (
  select interval 120 second as x union all
  select interval 10 second union all 
  select interval 2 minute union all 
  select interval 50 second
)
select 
  count(*) as all_starts,
  countif(x < interval 90 second) as false_starts
from trip_duration          

有输出