首页 > 解决方案 > 用于根据条件查找几个最大日期的 SQL 查询

问题描述

我想从下表中找出每个用户的event_date最大值user_role。因此,基本上对于第一个用户 John Doe 来说,他只是一个 Explorer,而他的最后一个用户event_date是在 2021-7-7。第二个 David Smith 既是开发者又是查看者,对于他来说,我想查询每个角色的最后/最大事件日期。并打印出event_categoryand event_name

ID 用户名 USER_ROLE EVENT_CATEGORY 活动日期 EVENT_NAME
1 约翰·多伊 探险家 条件警报 2021-07-07 04:00:13.000 运行警报
2 约翰·多伊 探险家 询问 2021-07-07 04:00:12.000 运行查询
3 约翰·多伊 探险家 条件警报 2021-07-07 04:00:11.000 检测警报漂移
4 大卫史密斯 开发商 调度器 2021-07-06 10:20:25.000 update_scheduled_plan
5 大卫史密斯 查看器 调度器 2021-07-06 10:20:25.000 update_scheduled_plan
6 大卫史密斯 开发商 询问 2021-07-06 10:20:16.000 运行查询
7 大卫史密斯 查看器 仪表板元素 2021-07-06 10:19:37.000 update_dashboard_element

结果应如下所示:

ID 用户名 USER_ROLE EVENT_CATEGORY 活动日期 EVENT_NAME
1 约翰·多伊 探险家 条件警报 2021-07-07 04:00:13.000 运行警报
4 大卫史密斯 开发商 调度器 2021-07-06 10:20:25.000 update_scheduled_plan
5 大卫史密斯 查看器 调度器 2021-07-06 10:20:25.000 update_scheduled_plan

标签: sqlsnowflake-cloud-data-platform

解决方案


这是另一种方法

SELECT
user_name,
user_role,
event_category,
event_date,
event_name
FROM myTable
QUALIFY ROW_NUMBER() over (
      partition by 
        user_name,
        user_role
      order by
        event_date DESC
    ) = 1

推荐阅读