首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用group by从表中获取最新记录

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

Stack Overflow用户
提问于 2014-10-24 17:35:55
回答 3查看 35关注 0票数 0

我有一个表格,显示订单编号、订单描述以及放置日期。

有时会重复序号。我想得到所有有描述的唯一订单号码,但只有在重复的情况下才显示最近的订单。

代码语言:javascript
运行
复制
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

因此,我的查询应该返回:

代码语言:javascript
运行
复制
orderID     orderInfo       dateAdded
1           cheese&tomato   2014-10-03
2           bacon           2014-10-05
3           tuna            2014-09-30

我试过:

代码语言:javascript
运行
复制
select orderID, orderInfo from orders group by orderID

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-24 17:46:46

您可以使用它自己简化LEFT JOIN表,on orderID 添加一个连接条件t1.dateAdded < t2.dateAdded

最后,选择结果,其中t2.dateAdded为null,并且每个顺序都有最新的条目。(因为,您当前在t1中的结果是联接组中的最新日期)

代码语言:javascript
运行
复制
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秒内执行。)

票数 2
EN

Stack Overflow用户

发布于 2014-10-24 17:39:27

尝试使用MAX()函数

代码语言:javascript
运行
复制
SELECT orderID,orderInfo,MAX(dateAdded) from (
  SELECT orderID,orderInfo,dateAdded from orders   ORDER BY dateAdded DESC) as t
   group by orderID
票数 0
EN

Stack Overflow用户

发布于 2014-10-24 17:40:34

就像你说的,你想要最近的,所以你可以用:

代码语言:javascript
运行
复制
select * from orders group by orderID order by dateAdded desc
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26553265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档