Sql 在Snowflake中,我希望找到由包含关键字的同一会话ID分组的整个会话
这是我的雪花桌的一个例子。我想查询按“会话ID”分组的、包含状态代码“无效”的整个会话 在上述情况下,*********1 3交互作用和*********2共存。但是*******1包含(或以“INVALID”结尾)。我想查询那些会话ID相同的会话 最简单的方法是什么?我试过使用Sql 在Snowflake中,我希望找到由包含关键字的同一会话ID分组的整个会话,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,这是我的雪花桌的一个例子。我想查询按“会话ID”分组的、包含状态代码“无效”的整个会话 在上述情况下,*********1 3交互作用和*********2共存。但是*******1包含(或以“INVALID”结尾)。我想查询那些会话ID相同的会话 最简单的方法是什么?我试过使用 Session_ID | USER_INPUT | STATUS_CODE *********1 | hi
Session_ID | USER_INPUT | STATUS_CODE
*********1 | hi | OK
*********1 | I would like to know how much item A is | OK
*********2 | Hello? | OK
*********1 | whatever | INVALID
*********2 | How are you doing | OK
*********2 | I'd like to get some info on... | OK
下面的方法很有效,但我不知道如何有选择地使用关键字“INVALID”进行查询。这基本上可以提取所有内容
提前谢谢 您可以使用子查询获取会话ID,然后在操作符中使用
:
row_number() over (partition by SESSION_ID order by DATE_TIME ASC) as SESSION_GROUP
您可以使用子查询获取会话ID,然后在
操作符中使用:
row_number() over (partition by SESSION_ID order by DATE_TIME ASC) as SESSION_GROUP
您可以使用条件计数来获取每个会话的“无效”数。然后只需过滤:
SELECT *
FROM tab
WHERE SESSION_ID IN (SELECT t.SESSION_ID FROM tab t WHERE t.STATUS_CODE = 'INVALID');
实际上,更简单的方法是使用限定:
select t.*
from (select t.*,
count_if(status_code = 'INVALID') over (partition by session_id) as num_invalid
from t
) t
where num_invalid > 0;
在这两种情况下,您可能需要将一个orderby
列添加到session\u id
的order中,并添加某种时间戳或session ordering列。您可以使用条件计数来获取每个会话的“无效”数。然后只需过滤:
SELECT *
FROM tab
WHERE SESSION_ID IN (SELECT t.SESSION_ID FROM tab t WHERE t.STATUS_CODE = 'INVALID');
实际上,更简单的方法是使用限定:
select t.*
from (select t.*,
count_if(status_code = 'INVALID') over (partition by session_id) as num_invalid
from t
) t
where num_invalid > 0;
在这两种情况下,您可能需要将一个orderby
列添加到session\u id
的order中,并添加某种时间戳或session ordering列。谢谢。我试过后一种,它按照我想要的方式工作。谢谢。我尝试了后一种,它按照我想要的方式工作。