use*_*793 3 mysql sql greatest-n-per-group
我试着做一个简单的查询,花了几个小时,却一无所获……
我需要的只是获取 MAX 日期,所有都是相应的字段。
我解释一下:我有一个包含以下字段的表:BasketID, OrderStatusTypeID, StatusDate。
我尝试只获取一条包含OrderStatusTypeID最后一个StatusDate.
这是数据
BasketID OrderStatusTypeID date
1111 13 2013-04-01 11:38:31
1111 26 2013-04-04 17:44:17
1111 39 2013-04-02 12:35:07
1111 40 2013-04-08 12:52:55
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
SELECT BasketID, OrderStatusTypeID, max(StatusDate) date
FROM st
where BasketID=1111
group by BasketID
Run Code Online (Sandbox Code Playgroud)
这是我需要的结果
BasketID OrderStatusTypeID date
63558 40 2013-04-08 12:52:55
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我只得到OrderStatusTypeID = 13而不是40!(StatusDate 的最大值,而不是 OrderStatusTypeID 的最大值)。
为什么???
BasketID OrderStatusTypeID date
63558 13 2013-04-08 12:52:55
Run Code Online (Sandbox Code Playgroud)
感谢您的快速回复!
我假设您正在使用,MySQL因为即使您没有在GROUP BY子句中指定所有非聚合列,您也可以运行查询。
有很多方法可以解决这个问题,但我习惯于这样做。该查询使用一个子查询,它分别获取date每个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
Run Code Online (Sandbox Code Playgroud)
即使存在未在GROUP BY子句中指定的非聚合列,您的查询也已成功执行而不会引发异常,因为它在 MySQL 中是允许的。请参阅GROUP BY 的 MySQL 扩展。
| 归档时间: |
|
| 查看次数: |
16448 次 |
| 最近记录: |