雪花分区

问题描述 投票:0回答:1

我有如下记录:

登录ID 登录类型 登录名 登录时间戳 page_id
1 活动 2023-01-13 00:22:02.560 1
1 活动 2023-01-13 00:22:02.634 1
1 页面 登录 2023-01-13 00:22:02.882 1
1 活动 登录 2023-01-13 00:22:02.929 1
1 页面 登录 2023-01-13 00:22:02.922 2
1 活动 登录 2023-01-13 00:22:02.962 2
1 活动 2023-01-13 00:22:07.751 2
2 活动 2023-01-13 00:24:02.560 1
2 活动 2023-01-13 00:24:02.634 1
2 页面 登录 2023-01-13 00:24:02.882 1
2 活动 2023-01-13 00:24:02.929 1
2 活动 登录 2023-01-13 00:24:02.962 1
2 活动 2023-01-13 00:24:07.751 1
3 页面 登录 2023-01-13 00:26:02.882 1
3 活动 2023-01-13 00:26:02.929 1
3 页面 登录 2023-01-13 00:26:02.949 2
3 活动 登录 2023-01-13 00:26:02.962 2
3 活动 2023-01-13 00:26:07.751 2

我想要一个查询来根据以下条件获取输出:

1) Need to fetch only login_name is null and login_type='event'
2) Need to partition based on login_id,page_id and fetch the count before and after for login_type='page' order by login_timestamp

例如: 对于上面的记录,结果应该是这样的:

登录ID 登录类型 登录名 count_of_event_before_page count_of_event_afer_page page_id
1 活动 2 0 1
1 活动 0 1 2
2 活动 2 2 1
3 活动 0 1 1
3 活动 0 1 2

任何人都可以指导我吗

group-by snowflake-cloud-data-platform lag partition lead
1个回答
1
投票

由于您只想获取 login_name 为 null 且 login_type 为“event”的行,因此我在投影中将它们声明为文字。但是当然,我在筛选行时考虑了这个要求。这是查询:

with add_changes as (    
     select login_id, login_type, login_name, 
     CONDITIONAL_CHANGE_EVENT( login_type = 'page' ) over ( partition by login_id order by login_timestamp) page_status
     from test_table
     where ( login_name is null and login_type='event' ) or (login_type = 'page')
 )
select login_id, 'event' login_type, null login_name, count_if(page_status = 0) count_of_event_before_page,
count_if( page_status = 2 ) count_of_event_afer_page
from add_Changes
group by login_id
order by login_id;

结果如下:

+----------+------------+------------+----------------------------+--------------------------+
| LOGIN_ID | LOGIN_TYPE | LOGIN_NAME | COUNT_OF_EVENT_BEFORE_PAGE | COUNT_OF_EVENT_AFER_PAGE |
+----------+------------+------------+----------------------------+--------------------------+
|        1 | event      | null       |                          2 |                        1 |
|        2 | event      | null       |                          2 |                        2 |
+----------+------------+------------+----------------------------+--------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.