Mysql, извлекающий строки на основе даты

#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) на основе даты … ? ..