[英]sql get row with max date and relative id record
我尝试做一个简单的查询,花了几个小时的时间,什么都没得到....
我只需要获得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
这是我的查询:
SELECT BasketID, OrderStatusTypeID, max(StatusDate) date
FROM st
where BasketID=1111
group by BasketID
这是我需要的结果
BasketID OrderStatusTypeID date
63558 40 2013-04-08 12:52:55
出于某种原因,我只获得OrderStatusTypeID = 13
而不是40
! (StatusDate的最大值,而不是OrderStatusTypeID的最大值)。
为什么???
BasketID OrderStatusTypeID date
63558 13 2013-04-08 12:52:55
感谢您的快速反应!
我假设您使用的是MySQL
因为即使您没有在GROUP BY
子句中指定所有非聚合列,也可以运行查询。
有很多方法可以解决这个问题,但我习惯这样做。 该查询使用子查询,该子查询分别获取每个BasketID
的最新date
。 由于子查询只返回两列,因此需要将其连接回表本身以获得其他列,只要它在两列上匹配: 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中是允许的。 请参阅GROUP BY的MySQL扩展 。
我知道这是一个旧线程,但为什么在这种情况下不可能使用ORDER BY和LIMIT? 像这样的查询:
SELECT * FROM st WHERE BasketID = 1111 ORDER BY Date DESC LIMIT 1
它非常容易使用TOP命令,如:
SELECT TOP 1 * FROM st
WHERE BasketID = 1111
ORDER BY date DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.