繁体   English   中英

sql获取具有最大日期和相对id记录的行

[英]sql get row with max date and relative id record

我尝试做一个简单的查询,花了几个小时的时间,什么都没得到....
我只需要获得MAX日期,所有都是相应的字段。

我解释说:我有一个包含这些字段的表: BasketIDOrderStatusTypeIDStatusDate
我尝试只获得一个包含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 由于子查询只返回两列,因此需要将其连接回表本身以获得其他列,只要它在两列上匹配: BasketIDDate

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM