У меня очень разочаровывающая проблема SQL, которую я не могу решить на протяжении всей жизни с помощью производного запроса, возвращающего составной ключ, но также выполняющего агрегатную функцию MIN () для другого поля в этой таблице.Если бы я выполнял MIN () для одного из составных ключей, это было бы легко, но, поскольку мне нужно вернуть оба ключа и выполнить функцию MIN () также для внешнего запроса, я не могу понять, как это сделать.,Весь запрос выглядит так:
SELECT
p.name as productname
,tmp.packageid
,tmp.price
,ppk2.packageoptionid
,ppk2.selcomproductid
FROM (
SELECT ppk.productid, ppk.packageid, MIN(ppk.price) as price
FROM product_package ppk
INNER JOIN package pk ON ppk.packageid = pk.id
INNER JOIN [plan] pl ON pk.planid = pl.id
WHERE pk.networkid = 1
GROUP BY ppk.productid, ppk.packageid
) tmp
INNER JOIN product_package ppk2 ON (
ppk2.productid = tmp.productid
AND ppk2.packageid = tmp.packageid
)
INNER JOIN product p ON (p.id = ppk2.productid)
WHERE p.isenabled = 1;
Текущие результаты:
--------------------------------------
productid | packageid | price
1 500 0
1 501 19.95
1 502 29.95
2 501 0
3 500 15
3 504 39.95
Желаемые результаты:
--------------------------------------
productid | packageid | price
1 500 0
2 501 0
3 500 15
В производном запросе "tmp" моя проблемалежит, так как мне нужны уникальные строки назад для каждой комбинации продукта / пакета с самой низкой ценой, прежде чем присоединиться к внешним таблицам.
Любая помощь будет принята с благодарностью!