#mysql
#mysql
Вопрос:
Вот код:
SELECT RD.INTREQDQUANTITY, I.strItemName, v.strVendName, iu.strItemUnitName,
ip.dblItemPAmount, MAX(ip.dtmItemPasOf) AS EXR
FROM TBLREQUESTDETAILS RD,tblitem I,tblvendor v,tblitemunit iu,tblitemprice ip`
WHERE RD.strReqDItemCode = I.strItemCode
AND RD.strReqDItemUnitCode = iu.strItemUnitCode
AND RD.strReqDVendCode = v.strVendCode
AND i.strItemCode = ip.strItemPItemCode
and RD.strReqDReqHCode = 'RQST121'
GROUP BY RD.INTREQDQUANTITY,I.strItemName,v.strVendName,iu.strItemUnitName, ip.dblItemPAmount
ORDER BY EXR desc ;
Что мне делать, если я хочу получить текущую цену для каждого itemname, vendorname и itemunit?? Я хочу получать только те строки, цена которых является последней… Помогите мне, пожалуйста, те, у кого есть поля, — это строки, которые я хочу получить
Комментарии:
1. Я думаю, вы должны удалить RD.INTREQDQUANTITY из group by, если вы хотите получить результат для этой комбинации (itemname, vendorname и itemunit)
Ответ №1:
Вы можете использовать where в сгруппированном значении (и использовать явное обозначение соединения)
SELECT RD.INTREQDQUANTITY, I.strItemName, v.strVendName, iu.strItemUnitName,
ip.dblItemPAmount, ip.dtmItemPasOf AS EXR
FROM TBLREQUESTDETAILS RD
INNER JOIN tblitem I ON RD.strReqDItemCode = I.strItemCode
INNER JOIN tblvendor v ON D.strReqDVendCode = v.strVendCode
INNER JOIN tblitemunit iu ON RD.strReqDItemUnitCode = iu.strItemUnitCode
INNER JOIN tblitemprice ip ON i.strItemCode = ip.strItemPItemCode
WHERE RD.strReqDReqHCode = 'RQST121'
and ( RD.INTREQDQUANTITY, I.strItemName, v.strVendName, iu.strItemUnitName, ip.dtmItemPasOf)
in ( SELECT RD.INTREQDQUANTITY, I.strItemName, v.strVendName, iu.strItemUnitName,
MAX(ip.dtmItemPasOf)
FROM TBLREQUESTDETAILS RD
INNER JOIN tblitem I ON RD.strReqDItemCode = I.strItemCode
INNER JOIN tblvendor v ON D.strReqDVendCode = v.strVendCode
INNER JOIN tblitemunit iu ON RD.strReqDItemUnitCode = iu.strItemUnitCode
INNER JOIN tblitemprice ip ON i.strItemCode = ip.strItemPItemCode
WHERE RD.strReqDReqHCode = 'RQST121'
GROUP BY RD.INTREQDQUANTITY,I.strItemName,v.strVendName,iu.strItemUnitName
)
ORDER BY EXR desc ;
(и используйте явное обозначение соединения .. я думаю, оно более читабельно)
Комментарии:
1. возвращено 0 строк:(
2. Я имею в виду, что возвращает только строку с наивысшим значением dtmPAsOf
3. Глядя на ваш образец, кажется, какой столбец вы хотите .. ?
4. Я хочу получить те, которые находятся внутри черного ящика, зеленого ящика и красного ящика. Которые являются строкой, содержащей последнюю базовую цену на дату
5. Извините, но самый высокий dtmPAsOf не является последней датой … и связанные строки должны содержать последнюю цену (псевдоним dblItemPAmount) на основе даты … ? ..