gpt4 book ai didi

mysql - 使用group by从表中获取最新记录

转载 作者:行者123 更新时间:2023-11-29 12:37:30 24 4
gpt4 key购买 nike

我有一个表格,其中显示订单号、订单说明以及下达日期。

有时订单号会重复。我想获取所有带有描述的唯一订单号,但仅在出现重复时显示最新的订单号

orderID     orderInfo       dateAdded
1 cheese 2014-10-01
1 cheese+ 2014-10-02
1 cheese&tomato 2014-10-03
2 bacon 2014-10-05
2 bacon 2014-10-04
2 bacon 2014-10-02
3 tuna 2014-09-30

所以我的查询应该返回:

orderID     orderInfo       dateAdded
1 cheese&tomato 2014-10-03
2 bacon 2014-10-05
3 tuna 2014-09-30

我已经尝试过:

select orderID, orderInfo from orders group by orderID

但这只是给了我每个 orderID 的第一个,我如何让它选择最新的?

最佳答案

你可以简单地LEFT JOIN table 本身on orderID AND 添加连接条件,t1.dateAdded < t2.dateAdded

最后你选择结果,其中 t2.dateAdded为空,并且您拥有每个订单的最新条目。(因为这样,您当前在 t1 中得到的结果就是加入组内的最新日期)

SELECT
*
FROM
test t1
LEFT JOIN
test t2
ON
t1.id = t2.id AND
t1.dateAdded < t2.dateAdded
WHERE
ISNULL (t2.dateAdded);

http://sqlfiddle.com/#!2/0629b2/1

但请注意,对于巨大表,这可能是巨大连接!

看看幕后: http://sqlfiddle.com/#!2/0629b2/3

如您所见,您需要 t2_dateAdded 为 null 的行。但正如您也可以看到的:与表格相比,结果已经更大了。因此,在本示例中,您创建了 6 个额外的联接结果 - 只是为了在之后将它们丢弃。 (我认为对于最多 100.000 个条目的表来说这没有问题。仍然在具有 500.000 行的服务器上运行它,并且查询在大约 2 秒内执行。)

关于mysql - 使用group by从表中获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26553265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com