我在解释:
我有一个具有以下字段的表:BasketID,OrderStatusTypeID,StatusDate.
我尝试只获取一个包含OrderStatusTypeID值和最后一个StatusDate的记录.
这是数据
BasketID OrderStatusTypeID date1111 13 2013-04-01 11:38:311111 26 2013-04-04 17:44:171111 39 2013-04-02 12:35:071111 40 2013-04-08 12:52:55
复制代码
这是我的查询:
SELECT BasketID, OrderStatusTypeID, max(StatusDate) dateFROM stwhere BasketID=1111group by BasketID
复制代码
这是我需要的结果
BasketID OrderStatusTypeID date63558 40 2013-04-08 12:52:55
复制代码
由于某种原因,我只能得到OrderStatusTypeID = 13而不是40!
(最大StatusDate,而不是最大OrderStatusTypeID).
为什么???
BasketID OrderStatusTypeID date63558 13 2013-04-08 12:52:55
复制代码
感谢您的快速回复!
有很多解决问题的方法,但是我习惯于这种方式.该查询使用一个子查询,该子查询分别获取每个BasketID的最新日期.由于子查询仅返回两列,因此您需要将其重新连接到表本身,以获取其他列,只要它在两列上都匹配:BasketID,Date.
SELECT a.*FROM st a INNER JOIN ( SELECT BasketID, MAX(Date) max_date FROM st GROUP BY BasketID ) b ON a.BasketID = b.BasketID AND a.Date = b.max_date
复制代码
即使存在GROUP BY子句中未指定的非聚合列,查询也已成功执行,而不会引发异常,因为在MySQL中是允许的.参见MySQL Extensions to GROUP BY.
联系客服