Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql获取具有最大日期和相对id记录的行_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

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*来实现这一点。。。这对其他人也有帮助!非常感谢您的快速响应!