mysql中的最大分组
假设我有以下两个条目:mysql中的最大分组,mysql,Mysql,假设我有以下两个条目: `id` | `timestamp` | `content` | `reference` 1 | 2012-01-01 | NEWER | 1 2 | 2013-01-01 | NEWEST | 1 3 | 2011-01-01 | OLD | 2 我需要查询的以下结果: `id` | `t
`id` | `timestamp` | `content` | `reference`
1 | 2012-01-01 | NEWER | 1
2 | 2013-01-01 | NEWEST | 1
3 | 2011-01-01 | OLD | 2
我需要查询的以下结果:
`id` | `timestamp` | `content` | `reference`
2 | 2013-01-01 | NEWEST | 1
3 | 2011-01-01 | OLD | 2
以下是我目前掌握的信息,但这是不正确的:
SELECT * FROM table GROUP BY reference
这里的正确查询是什么
我希望每个参考id获得最新的内容
。在上面的示例中,有两个参考id(1和2),我希望获得每个id的最新条目
SELECT *
FROM (SELECT * FROM table ORDER BY timestamp desc) as sub
GROUP BY reference
如果要展开查询,请将限制逻辑放入子查询中,如下所示,以获得更好的性能:
SELECT *
FROM (SELECT *
FROM table
WHERE 1=1 and 2=2
ORDER BY timestamp desc
) as sub
GROUP BY reference
我想你想要最新的参考资料?大概是这样的:
SELECT * FROM my_table
WHERE id IN (
SELECT id FROM my_table ORDER BY timestamp DESC GROUP BY reference LIMIT 1
);
你能用语言描述你所期望的吗。您的数据示例并不明显。请查看更新后的响应。如果您可以将架构和测试数据放在SQLFiddle上(对于所有类似的问题),这将对读者非常有帮助。唉,这是行不通的-
id
不属于子选择中的groupby
。没有时间进一步研究,但希望它能给你一些想法!出于好奇,为什么在中输入1=1和2=2会使查询更高效?此外,您的查询是否比在中输入的查询性能更好(与其他两个答案一样)?如果是,为什么?我不是建议您使用1=1
,而是建议您使用where content='old'
来限制内部查询中的where结果。嵌套查询和
语句中的具有大致相同的性能。
select * from table where reference_id in
(select max(id) from table group by reference)