我是BigQuery的新手,在使用BigQuery的导航功能时遇到了麻烦. 我不明白这些函数是如何工作的.

我有一张桌子,它的 struct 如下:

Event_id created_ts
1 2020-01-01 12:00:00
2 2020-01-01 12:01:00
3 2020-01-01 12:05:00
4 2020-01-01 12:06:00

并且我想要计算在超过一分钟的不活动之后改变的会话ID.

Session_id created_ts
1 2020-01-01 12:00:00
1 2020-01-01 12:01:00
2 2020-01-01 12:05:00
2 2020-01-01 12:06:00

以下是我开始编写的SQL代码:

select event_id, 
    created_ts, 
    EXTRACT(minute FROM created_ts) as minute,
    date_diff(date(created_ts),coalesce(date(lag(created_ts - minute) over(partition by event_id order by event_id)), date(created_ts)),
) session_id
from table1

推荐答案

您可以首先比较创建的DateTime的分钟数,看哪一个大于1,然后过滤掉所有不需要的行

WITH CTE AS (
select event_id, 
    created_ts, 
CASE WHEN TIMESTAMP_DIFF( coalesce(date(lag(created_ts - minute) over(partition by event_id order by event_id)), date(created_ts)),date(created_ts), MINUTE) > 1 then 1 ELSE 0 END bg
from table1)
SELECT event_id, 
    created_ts
FROM CTE WHERE bg = 1

Sql相关问答推荐

判断时间之间是否有时间

SQL(PostgreSQL)从条件创建点表

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

我可以将INSERT语句与SELECT一起使用来创建条件吗?

在SQL中创建一个计数器,根据BigQuery/SQL中的条件递归地添加行值

在甲骨文中查找前一个星期一的S日期

SQL将 Select 查询作为新列添加到另一个 Select 查询

从依赖于其他表的值的XREF表中的值分组获得正确的计数?

在SQL查询中使用COALESS

在MS Access Modern图表的X轴上显示时间值时遇到问题

ColdFusion+Docker:未安装SQLSERVER包

将一个数组反嵌套到另外两个数组SQL中(Athena/presto)

明细表中没有记录如何更新主表的值为0

改进的SQL子字符串提取

如何将insert语句重复n次使一个值递增?

需要使用SQLite查询进行一些奇怪的时间转换

创建具有多个子查询的 SQL 视图

基于变量的条件 WHERE 子句

Postgres存在限制问题「小值」

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?