当前位置: 首页 > 面试题库 >

在MySQL中返回每个“ group by”的“ last”行

杜祺
2023-03-14
问题内容

有没有更有效的方法来执行以下操作?

select * 
    from foo as a
    where a.id = (select max(id) from foo where uid = a.uid group by uid)
    group by uid;
)

这个答案看起来很相似,但这是这样做的最好方法-
如何在MySQL中为每个组选择第一行?

谢谢,

克里斯。

PS表看起来像:

CREATE TABLE foo (
    id INT(10) NOT NULL AUTO_INCREMENT,
    uid INT(10) NOT NULL,
    value VARCHAR(50) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `uid` (`uid`)
)

数据

id, uid, value
 1,   1, hello
 2,   2, cheese
 3,   2, pickle
 4,   1, world

结果:

id, uid, value
 3,   2, pickle
 4,   1, world

有关更多详细信息,请参见http://www.barricane.com/2012/02/08/mysql-select-last-matching-
row.html


问题答案:

试试这个查询-

SELECT t1.* FROM foo t1
  JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2
    ON t1.id = t2.id AND t1.uid = t2.uid;

然后使用EXPLAIN分析查询。

SELECT t1.* FROM foo t1
  LEFT JOIN foo t2
    ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;


 类似资料:
  • 我想使用Laravel Eloquent完成任务。我在网上搜索过,没有找到任何有说服力的东西。有些人将groupBy()查询与查询生成器一起使用,如以下链接 但是我想创建这样的查询风格: 此代码仅返回第一个的计数。但是我要计算所有的。

  • 问题内容: 在此查询中,我指定要退回(硬编码)的汽车型号。因此,下面的SQL为每种模型返回 一条 记录: 现在有可能在没有联合的情况下使此SQL返回多个由某个字段指定的模型。例子: 我知道“拥有数量”没有意义,但是我需要一种方法来指定每个模型要返还多少辆汽车。 http://sqlfiddle.com/#!2/421e4/1/0 问题答案: 尝试像下面那样为每个组生成行号,然后将行数限制为im以下

  • 问题内容: 我希望能够为每个菜单返回5个菜单项。我试过这几个脚本,但没有运气。这是桌子 这是我现在所拥有的。我收到以下脚本的错误消息。错误:子查询返回的行数超过1。 任何建议都非常感谢。 问题答案: 您必须为此使用副作用变量

  • 问题内容: 一年分为12个月。我们可以在四个星期内分解一个月。 在MySQL中,如何返回每月的星期几?(例如:第一周:2个条目,第二周:5个条目,第三周:3个条目;第四周:8个条目) 使用Week和WeekOfYear不能获得理想的结果,因为函数返回的是星期数YEAR,而不是月份。 问题答案: 我想说明的是,这可能不是分割数据的好方法-(请参阅注释),但这将使您尽可能地接近。

  • 问题内容: 假设我有一个返回sth的查询。像这样: 是否可以添加另一列来枚举每个组中的行(即,枚举具有其他角色的经理,工人和人员,而不考虑其他角色)?像这样: 使用Oracle扩展很好。 问题答案: 使用窗口功能:

  • 问题内容: 我想要一个有效的MySQL存储过程: 我想我只是想让MySQL回答这个问题,但我对光标的理解却不够好:如何为查询返回的每一行执行一次存储过程? 问题答案: “循环”(for-each,while等)和“分支”(if-else,call等)等概念是 过程性的 ,在诸如SQL这样的 声明性 语言中不存在。通常,人们可以以声明的方式表达自己期望的结果,这将是解决此问题的正确方法。 例如,如果