我有如下记录:
登录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 |
任何人都可以指导我吗
由于您只想获取 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 |
+----------+------------+------------+----------------------------+--------------------------+