使用多个条件对分区进行排序

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 组碰巧具有相同的最大更新值,我添加的第二个排序条件会打破平局。在这种情况下,排序会回落到检测时间较长的组,以决定哪个组先出现。