Mysql sql获取具有最大日期和相对id记录的行
我试着做一个简单的查询,花了几个小时的时间却一无所获……Mysql sql获取具有最大日期和相对id记录的行,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,我试着做一个简单的查询,花了几个小时的时间却一无所获…… 所有我需要的是得到最大日期和所有的是相应的字段 我要解释一下: 我有一个带有以下字段的表:BasketID,OrderStatusTypeID,StatusDate 我尝试只获取一条记录,其中包含最后一个StatusDate的OrderStatusTypeID值 SELECT a.* FROM st a INNER JOIN ( SELECT BasketID, MAX(D
所有我需要的是得到最大日期和所有的是相应的字段 我要解释一下: 我有一个带有以下字段的表:
BasketID
,OrderStatusTypeID
,StatusDate
我尝试只获取一条记录,其中包含最后一个
StatusDate
的OrderStatusTypeID
值
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
这是数据
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的最大值)。为什么
感谢您的快速响应我假设您使用的是
MySQL
,因为即使您没有在GROUPBY
子句中指定所有非聚合列,也可以运行查询
有很多方法可以解决这个问题,但我已经习惯了这样做。查询使用一个子查询,该子查询分别获取每个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中是允许的。看。我知道这是一条旧线,但是
在这种情况下,为什么不能使用ORDER BY和LIMIT?
这样的查询:
从st选择*
其中BasketID=1111
按日期说明订购
限制1它很容易使用TOP命令,例如:
SELECT TOP 1 * FROM st
WHERE BasketID = 1111
ORDER BY date DESC
您的查询甚至没有编译。你的数据库管理系统是什么?我想你可以通过从表ORDER by date DESC中选择TOP 1*来实现这一点。。。这对其他人也有帮助!非常感谢您的快速响应!