Возврат всех столбцов для минимального значения в зависимости от сгруппированного столбца - PullRequest
0 голосов
/ 17 марта 2020

Я довольно новичок в t- SQL и у меня проблемы с тем, что я считаю довольно простым c запросом. Я пытаюсь вернуть все мои столбцы таблицы для минимального значения (цены) в зависимости от целевой переменной. Мой текущий запрос:

SELECT min(price) as price, origin, destination FROM prices
GROUP BY origin, destination
ORDER BY destination

Что дает:

price               origin      destination
392                 Baltimore   Aarhus
264                 Kansas City Aarhus
...

Однако мне нужно, чтобы оно было:

price               origin      destination
264                 Kansas City Aarhus
...

Есть идеи?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Вы можете написать sql как показано ниже

SELECT a2.mp, a1.origin, a2.destination
FROM A a1
INNER JOIN
  (SELECT min(price) AS mp,
          destination
   FROM A
   GROUP BY destination) a2 ON a1.destination = a2.destination
AND a1.price = a2.mp

DBFiddle

1 голос
/ 17 марта 2020

Использовать row_number():

select p.*
from (select p.*, row_number () over (partition by product, destination order by price) as seq
      from prices p
     ) p
where p.seq = 1;

РЕДАКТИРОВАТЬ: Вы можете использовать обновляемый cte для операции обновления:

WITH U_CTE AS (
     SELECT lp.*, 
            row_number () over (partition by product, destination order by price) as seq
     FROM lowest_price lp
)
UPDATE ucte
      SET ucte.col = ucte.price
FROM U_CTE ucte
WHERE seq = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...