Я пытаюсь получить самую низкую цену конкретной цитаты на SQL. Я пробовал следующее с ошибочными результатами:
SELECT * FROM price WHERE price = (SELECT MIN (цена) как цена от цены WHERE id_quote = 36
SELECT id_provider, MIN (цена) в зависимости от цены WHERE id_quote = 36
Я понимаю, что я получаю несколько результатов по первому запросу, если у меня такая же цена в этой таблице, независимо от цитаты. Но я не знаю, почему второй не дает мне правильных результатов.
Мне нужно вызвать только id_provider и его цену из этой конкретной цитаты (без группы).
Любая помощь?
Я думаю, вам просто нужен коррелированный подзапрос:
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);
Обратите внимание, что условие "quote" переместилось во внешний запрос.
Мне нравится использовать 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
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