SQL найти лучшую строку в группе на основе нескольких столбцов? - PullRequest
0 голосов
/ 01 марта 2019

Допустим, у меня есть таблица Oracle с измерениями в разных категориях:

CREATE TABLE measurements (
  category CHAR(8),
  value NUMBER,
  error NUMBER,
  created DATE
)

Теперь я хочу найти «лучшую» строку в каждой категории, где «наилучшее» определяется следующим образом:

  • У него самая низкая ошибка.
  • Если есть несколько измерений с одной и той же ошибкой, то самое последнее, которое было создано, считается лучшим.

Это вариант наибольшего N на группу , но с двумя столбцами вместо одного.Как я могу выразить это в SQL?

1 Ответ

0 голосов
/ 01 марта 2019

Использовать ROW_NUMBER:

WITH cte AS (
    SELECT m.*, ROW_NUMBER() OVER (PARTITION BY category ORDER BY error, created DESC) rn
    FROM measurements m
)

SELECT category, value, error, created
FROM cte
WHERE rn = 1;

. Для краткого объяснения предложение PARTITION BY предписывает БД генерировать отдельный номер строки для каждой группы записей в той же категории.Предложение ORDER BY помещает эти записи с ошибкой smalls .Если две или более записи в одной и той же категории будут связаны с наименьшей ошибкой, то на следующем уровне сортировки будет помещена запись с самой последней датой создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...