使用多个条件对分区进行排序
Sort partitions with several criteria
我尝试使用多个标准对分区进行排序。
使用此查询,我得到以下输出:
SELECT id, aggregate_id, aggregate_update, detection_time
FROM report.report_table R1
WHERE table_name NOT LIKE 'AGGREGATE_ALERT_EVENT'
ORDER BY MAX(aggregate_update)
OVER (PARTITION BY aggregate_id) ASC,
aggregate_id, aggregate_update asc, detection_time desc;
我们看到行按 aggregate_id 分区。在每个分区内,行首先按 aggregate_update ASC 排序,然后按 detection_time DESC 排序。但是,分区仅按 MAX(aggregate_update) 排序,我希望分区按 MAX(aggregate_update) 和 MAX(detection_time) DESC 排序。我尝试得到以下结果:
如何根据多个标准对分区本身进行排序?
我认为这应该会给你想要的行为:
SELECT id, aggregate_id, aggregate_update, detection_time
FROM report.report_table R1
WHERE table_name NOT LIKE 'AGGREGATE_ALERT_EVENT'
ORDER BY
MAX(aggregate_update) OVER (PARTITION BY aggregate_id),
MAX(detection_time) OVER (PARTITION BY aggregate_id) DESC,
aggregate_id,
detection_time DESC;
如果两个 aggregate_id
组碰巧具有相同的最大更新值,我添加的第二个排序条件会打破平局。在这种情况下,排序会回落到检测时间较长的组,以决定哪个组先出现。
我尝试使用多个标准对分区进行排序。
使用此查询,我得到以下输出:
SELECT id, aggregate_id, aggregate_update, detection_time
FROM report.report_table R1
WHERE table_name NOT LIKE 'AGGREGATE_ALERT_EVENT'
ORDER BY MAX(aggregate_update)
OVER (PARTITION BY aggregate_id) ASC,
aggregate_id, aggregate_update asc, detection_time desc;
我们看到行按 aggregate_id 分区。在每个分区内,行首先按 aggregate_update ASC 排序,然后按 detection_time DESC 排序。但是,分区仅按 MAX(aggregate_update) 排序,我希望分区按 MAX(aggregate_update) 和 MAX(detection_time) DESC 排序。我尝试得到以下结果:
如何根据多个标准对分区本身进行排序?
我认为这应该会给你想要的行为:
SELECT id, aggregate_id, aggregate_update, detection_time
FROM report.report_table R1
WHERE table_name NOT LIKE 'AGGREGATE_ALERT_EVENT'
ORDER BY
MAX(aggregate_update) OVER (PARTITION BY aggregate_id),
MAX(detection_time) OVER (PARTITION BY aggregate_id) DESC,
aggregate_id,
detection_time DESC;
如果两个 aggregate_id
组碰巧具有相同的最大更新值,我添加的第二个排序条件会打破平局。在这种情况下,排序会回落到检测时间较长的组,以决定哪个组先出现。