有没有更有效的方法来执行以下操作?
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这样的 声明性 语言中不存在。通常,人们可以以声明的方式表达自己期望的结果,这将是解决此问题的正确方法。 例如,如果