我在获取我想要的查询结果时遇到问题。在过去的几个小时里,我一直试图解决它,但一直无法解决。
表结构
CREATE TABLE `whs_Lot_header` (
`iLotheaderid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`iUniqueid` varchar(20) DEFAULT NULL,
`iImo` int(11) DEFAULT NULL,
`cWarehousecode` varchar(10) DEFAULT '',
`cOriginmembercode` varchar(4) DEFAULT '',
`cDestinationmembercode` varchar(4) DEFAULT '',
`cCustomeralias` varchar(25) DEFAULT '',
`cFilenumber` varchar(30) DEFAULT '',
`cLotnumber` varchar(20) DEFAULT '',
`cHousebillofladingnumber` varchar(30) DEFAULT '',
`cArrivalnoticenumber` varchar(30) DEFAULT '',
`cCustomerreference` varchar(20) DEFAULT '',
`cForwarderreference` varchar(20) DEFAULT '',
`cShipperreference` varchar(20) DEFAULT '',
`cPlaceofreceipt` varchar(5) DEFAULT '',
`cPortofloading` varchar(5) DEFAULT '',
`cPortofdischarge` varchar(5) DEFAULT '',
`cPlaceofdelivery` varchar(5) DEFAULT '',
`tReceiveddate` date DEFAULT '0000-00-00',
`cWarehousestatus` varchar(5) DEFAULT '',
`tStatusdate` date DEFAULT '0000-00-00',
`bStopoff` enum('N','Y') NOT NULL DEFAULT 'N',
`cComments` varchar(2048) DEFAULT '',
`cVessel` varchar(30) DEFAULT '',
`cIntransitto` varchar(5) DEFAULT '',
`cTransitport` varchar(5) DEFAULT '',
`tETATransitPort` date DEFAULT '0000-00-00',
`cIntransitfrom` varchar(5) DEFAULT '',
`tEtaintransitfrom` date DEFAULT '0000-00-00',
`bContainerloaded` char(1) NOT NULL DEFAULT '',
`cLoadplanreference` varchar(20) DEFAULT '',
`cContainernumber` varchar(12) DEFAULT '',
`cContainersealnumber` varchar(20) DEFAULT '',
`cLoadplancomments` varchar(2048) DEFAULT '',
`cVoyage` varchar(10) DEFAULT '',
`iStatus` int(11) DEFAULT '0',
`iEnteredBy` int(11) NOT NULL DEFAULT '0',
`tEntered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`iUpdatedBy` int(11) NOT NULL DEFAULT '0',
`tUpdated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`iLotheaderid`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$
和
CREATE TABLE `whs_Lot_lineitem` (
`iLotlineitemid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`iLotheaderid` bigint(20) DEFAULT NULL,
`cCommodity` varchar(254) DEFAULT '',
`iPieces` int(11) DEFAULT NULL,
`cUom` char(1) NOT NULL DEFAULT '',
`nWeight` float(8,2) DEFAULT '0.00',
`nCube` float(15,3) NOT NULL DEFAULT '0.000',
`cOverdimensionflag` enum('N','Y') NOT NULL DEFAULT 'N',
`cOverheightflag` enum('N','Y') NOT NULL DEFAULT 'N',
`cOverlengthflag` enum('N','Y') NOT NULL DEFAULT 'N',
`cOverweightflag` enum('N','Y') NOT NULL DEFAULT 'N',
`cOverwidthflag` enum('N','Y') NOT NULL DEFAULT 'N',
`cHazardous` enum('N','Y') NOT NULL DEFAULT 'N',
`iStatus` int(11) DEFAULT '0',
`iEnteredBy` int(11) NOT NULL DEFAULT '0',
`tEntered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`iUpdatedBy` int(11) NOT NULL DEFAULT '0',
`tUpdated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`iLotlineitemid`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$
查询
SELECT whs_Lot_header.cLotnumber,
whs_Lot_header.cCustomerreference,
whs_Lot_header.cPlaceofdelivery,
whs_Lot_header.cVessel,
whs_Lot_header.tReceiveddate,
whs_Lot_header.cWarehousestatus,
whs_Lot_lineitem.cHazardous,
whs_Lot_lineitem.iPieces,
whs_Lot_lineitem.nWeight,
whs_Lot_lineitem.cCommodity,
whs_Lot_lineitem.nCube
FROM whs_Lot_header,whs_Lot_lineitem
WHERE whs_Lot_header.iLotheaderid = whs_Lot_lineitem.iLotheaderid
AND whs_Lot_header.iStatus = 0
AND whs_Lot_lineitem.iStatus = 0
AND whs_Lot_header.cWarehousecode IN ('HAMW')
AND whs_Lot_header.cWarehousestatus = 'B'
GROUP BY whs_Lot_header.cLotnumber,whs_Lot_lineitem.cCommodity
问题
whs_Lot_header
表包含一个 cLotnumber
的多个记录,我只想检查最近记录的 cWarehousestatus
。
基本上我想设置一个 where 子句优先级,我想在只检查其状态之后检查最近的记录。
如果有人可以建议修改上述查询或提出新的问题查询,那将对我很有帮助。
提前致谢。
最佳答案
请查看以下查询是否解决了您的问题:
SELECT wlh.cLotnumber, wlh.cCustomerreference, wlh.cPlaceofdelivery,
.....................
.....................
FROM whs_Lot_header wlh
INNER JOIN
(
SELECT iLotheaderid, cLotnumber, cCommodity, MAX(tEntered) FROM whs_Lot_header
GROUP BY cLotnumber, cCommodity
) temp
ON
wlh.iLotheaderid = temp.iLotheaderid
AND wlh.cCommodity = temp.cCommodity
AND wlh.cWarehousecode IN ('HAMW')
AND wlh.cWarehousestatus = 'B'
INNER JOIN whs_Lot_lineitem wll
ON wlh.iLotheaderid = wll.iLotheaderid
请注意,temp
中的 GROUP BY
子句基于原始问题中字段的 GROUP BY
。同样,在给定查询中编写的条件类似于可以在此处使用 INNER JOIN
编写的条件。
关于php - MYSQL 获取最近的记录,然后在 where 子句中验证它的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768658/