MySQL извлекает строки с последней датой

#mysql

#mysql

Вопрос:

Вот код:

 SELECT        tblitem.strItemCode, tblitem.strItemName, tblitemunit.strItemUnitName, tblvendor.strVendName, MAX(tblitemprice.dtmItemPasOf) AS Expr1, 
                         tblitemprice.dblItemPAmount
FROM            tblclassification INNER JOIN
                         tblitem ON tblclassification.strClasCode = tblitem.strItemClasCode INNER JOIN
                         tblitemprice ON tblitem.strItemCode = tblitemprice.strItemPItemCode INNER JOIN
                         tblitemunit ON tblitemprice.strItemPItemUnitCode = tblitemunit.strItemUnitCode INNER JOIN
                         tblvendor ON tblclassification.strClasCode = tblvendor.strVendClasCode AND tblitemprice.strItemPVendCode = tblvendor.strVendCode AND tblitem.deleted_at IS NULL
GROUP BY tblitem.strItemCode, tblitem.strItemName, tblitemunit.strItemUnitName, tblvendor.strVendName, tblitemprice.dblItemPAmount
 

И вот результат:

 CODE     NAME        UNIT    VENDOR          DATE            PRICE

ITEM101-Fudgee Bar-Piece-Imus Palengke 10/9/20165:03:32AM - 6.5

ITEM102-Yum Burger-Box-Jollibee Lumina Mall-10/9/2016 6:13:27 AM  -    2500

ITEM102-Yum Burger-Piece-Jollibee Lumina Mall-10/9/2016 4:42:28 AM  -  30
ITEM102-Yum Burger-Piece-Jollibee Lumina Mall-10/13/2016 12:37:31 PM-  35

ITEM102-Yum Burger  Piece   Jollibee Lumina Mall    10/14/2016 10:05:44 PM  40
 

Чего я хочу, так это получить только строку с последней ценой. Может кто-нибудь мне помочь, пожалуйста.

Я хочу получить Item101 и только последнюю строку в ITEM102, поскольку она является последней.

Комментарии:

1. Я хочу получить последнюю строку только для ITEM102, поскольку она самая последняя.

Ответ №1:

Если я правильно понимаю, вы ищете последнюю обновленную цену строки. Это легко сделать:

  1. Упорядочивайте свои данные по их соответствующей временной метке в обратном порядке ( ORDER BY <FIELD_NAME> DESC ). Из того, что я понял из вашего запроса и результатов, Expr1 это последняя дата по заданной цене.
  2. Выберите только один элемент ( LIMIT 1 ). Поскольку ваши данные уже упорядочены в обратном хронологическом порядке, вы обязательно выберете самую последнюю.

SQL для этого будет

 SELECT        tblitem.strItemCode, tblitem.strItemName, tblitemunit.strItemUnitName, tblvendor.strVendName, MAX(tblitemprice.dtmItemPasOf) AS Expr1, 
                         tblitemprice.dblItemPAmount
FROM            tblclassification INNER JOIN
                         tblitem ON tblclassification.strClasCode = tblitem.strItemClasCode INNER JOIN
                         tblitemprice ON tblitem.strItemCode = tblitemprice.strItemPItemCode INNER JOIN
                         tblitemunit ON tblitemprice.strItemPItemUnitCode = tblitemunit.strItemUnitCode INNER JOIN
                         tblvendor ON tblclassification.strClasCode = tblvendor.strVendClasCode AND tblitemprice.strItemPVendCode = tblvendor.strVendCode AND tblitem.deleted_at IS NULL
GROUP BY tblitem.strItemCode, tblitem.strItemName, tblitemunit.strItemUnitName, tblvendor.strVendName, tblitemprice.dblItemPAmount
ORDER BY Expr1 DESC
LIMIT 1
 

Попробуйте!