Фильтр SQL по двум столбцам - PullRequest
0 голосов
/ 25 мая 2018

INPUT

Это моя таблица с именем 'MYTABLE'. Значение P3 является постоянным.Но значение P1 и P2 может быть любым целым числом !!!

enter image description here

AIM

Моя цельгруппировать по городам и продуктам, для каждой комбинации город-продукт, а затем (для каждого города-магазина) взять наименьшее значение P3. Но я хочу сохранить в результате значения P1 и P2.

QUERY

До сих пор я пробовал следующий запрос, который выполняетне предоставить вывод, который я ищу.

SELECT CITY, PROD, MIN(P3)
FROM MYTABLE
GROUP BY CITY, PROD

Результат показывает 2 строки.2 строки правильные, но я теряю столбцы P1 и P2.

enter image description here

ОЖИДАЕМЫЙ ВЫХОД

Поэтому мой вопрос заключается в том, как написать запрос, чтобы сохранить значение P1и P2.(см. изображение ниже)

enter image description here

PS: я не совсем хочу использовать 'GROUP BY' в моем запросе.Если есть другой способ решить эту проблему, это тоже было бы здорово.Каким-то образом я нахожу цель не слишком сложной, но по какой-то причине я не могу понять (даже после просмотра в Интернете), как ее решить.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы хотите использовать раздел, чтобы выбрать подходящую строку для каждой группы city и prod, основываясь на значении p3:

with cte as (select *, row_number() over(partition by city, prod order by p3) as rn
             from table1)
select city, prod, p1, p2, p3
from cte
where rn = 1

Вы можете увидеть его в действии здесь .

0 голосов
/ 25 мая 2018

Я бы использовал оконную функцию row_num, чтобы упорядочить строки в соответствии с их p3 значениями и взять первое:

SELECT city, prod, p1, p2, p3
FROM   (SELECT city, prod, p1, p2, p3,
               ROW_NUM() OVER (PARTITION BY city, prod ORDER BY p3 DESC) AS rn
        FROM   mytable) t
WHERE  rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...