Моя цель - выбрать запись по двум критериям, которые зависят друг от друга, и сгруппировать ее по другим критериям.
Я нашел решение, которое выбирает запись по одному критерию и группирует ее
SELECT *
FROM "records"
NATURAL JOIN (
SELECT "group", min("priority1") AS "priority1"
FROM "records"
GROUP BY "group") AS "grouped"
Мне кажется, я понимаю концепцию этого поиска - выберите свойства, которые вам интересны, и сопоставьте их в исходной таблице - но когда я использую эту концепцию с двумя приоритетами, я получаю этого монстра
SELECT *
FROM "records"
NATURAL JOIN (
SELECT *
FROM (
SELECT "group", "priority1", min("priority2") AS "priority2"
FROM "records"
GROUP BY "group", "priority1") AS "grouped2"
NATURAL JOIN (
SELECT "group", min("priority1") AS "priority1"
FROM "records"
NATURAL JOIN (
SELECT "group", "priority1", min("priority2") AS "priority2"
FROM "records"
GROUP BY "group", "priority1") AS "grouped2'"
GROUP BY "group") AS "GroupNested") AS "grouped1"
Все, что я спрашиваю, не можетне написано ли лучше (оптимизировано и выглядит лучше)?
JSFIDDLE
---- Обновление ----
Цельявляется то, что я хочу выбрать один id
для каждого group
на priority1
и priority2
должен быть выбран в качестве первого, а затем приоритет2).
Пример: Когда у меня есть таблица records
с id
, group
, priority1
и priority2
с данными:
id , group , priority1 , priority2
56 , 1 , 1 , 2
34 , 1 , 1 , 3
78 , 1 , 3 , 1
результат должен быть 56,1,1,2
.Для каждой группы сначала ищите мин из priority1
, а затем мин из priority2
.
Я пытался объединить max
и min
вместе (в одном запросе`, но он ничего не находит (у меня этого запроса больше нет).