Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Snowflake中,我希望找到由包含关键字的同一会话ID分组的整个会话_Sql_Snowflake Cloud Data Platform - Fatal编程技术网

Sql 在Snowflake中,我希望找到由包含关键字的同一会话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

这是我的雪花桌的一个例子。我想查询按“会话ID”分组的、包含状态代码“无效”的整个会话

在上述情况下,*********1 3交互作用和*********2共存。但是*******1包含(或以“INVALID”结尾)。我想查询那些会话ID相同的会话

最简单的方法是什么?我试过使用

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列。

谢谢。我试过后一种,它按照我想要的方式工作。谢谢。我尝试了后一种,它按照我想要的方式工作。