Сортировать разделы по нескольким критериям - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь отсортировать разделы по нескольким критериям.

С этим запросом у меня есть следующий вывод:

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;

partition sorted by aggregate_update but not detection_time

Мы видим, что строки разделены по aggregate_id.Внутри каждого раздела строки сортируются сначала по ASC aggregate_update, а затем по DESC времени обнаружения.Тем не менее, разделы сортируются только по MAX (aggregate_update), и я хочу, чтобы разделы сортировались по MAX (aggregate_update) и MAX (обнаружения_ время) DESC.Я пытаюсь получить следующий результат:

partition sorted by aggregate_update but and detection_time

Как можно отсортировать сами разделы между ними по нескольким критериям?

1 Ответ

0 голосов
/ 01 февраля 2019

Я думаю, что это должно дать вам желаемое поведение:

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 имеют одинаковое максимальное значение обновления.В этом случае сортировка выполняется в зависимости от того, какая группа имеет большее время обнаружения, чтобы решить, что произойдет первым.

...