SQL SELECT MIN значение с оператором WHERE - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь получить самую низкую цену конкретной цитаты по SQL.Я попробовал следующее с ошибочными результатами:

  • ВЫБРАТЬ * ОТ цены ГДЕ цена = (ВЫБРАТЬ МИНУТУ (цена) как цену ОТ цены ГДЕ id_quote = 36

  • ВЫБЕРИТЕ id_provider, MIN (цена) как цену ОТ цены ГДЕ id_quote = 36

Я понимаю, что я получаю несколько результатов по первому запросу, если у меня такая же цена вэта таблица независимо от цитаты. Но я не знаю, почему вторая не дает мне правильных результатов.

Мне нужно вызвать только id_provider и его цену из этой конкретной цитаты (без группы).

Любая помощь?

Table price

Ответы [ 3 ]

0 голосов
/ 24 мая 2018
You can do it this way if you want:

SELECT TOP 1 id_provider, price FROM price WHERE id_quote=36 ORDER BY price ASC
0 голосов
/ 24 мая 2018

Мне нравится использовать RANK () для такого рода проблем:

SELECT id_quote, id_provider, price
FROM
(
SELECT id_quote id_provider, price,
RANK() OVER(PARTITION BY id_quote ORDER BY price ASC) AS rnk
FROM price
) sub
WHERE rnk = 1
0 голосов
/ 24 мая 2018

Я думаю, вам просто нужен коррелированный подзапрос:

SELECT p.*
FROM price p
WHERE p.id_quote = 36 AND
      p.price = (SELECT MIN(p2.price) FROM price p2 WHERE p2.id_quote = p.id_quote);

Обратите внимание, что условие "цитата" перемещено во внешний запрос.

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