偏移MySQL Max
我正在运行 MySQL 查询来获取按每个字段分组的每行的最高 ID。我这样做是:
SELECT period,max(id) AS maxid
FROM f
WHERE type = '1'
GROUP BY period
这会产生:
+--------+-------+
| period | maxid |
+--------+-------+
| 1 | 21878 |
| 2 | 21879 |
| 3 | 20188 |
| 4 | 21873 |
| 5 | 21872 |
| 6 | 21874 |
| 7 | 21875 |
| 8 | 21876 |
| 9 | 21877 |
+--------+-------+
这是我期待的结果。
但是,我现在想要运行一个查询,该查询返回最大 id,但每个周期返回一个。我认为最好的方法是使用 LIMIT 上的偏移参数。为了测试这是否有效,我运行了:
SELECT period,(SELECT id FROM freight_data ORDER BY id DESC LIMIT 1) AS maxid
FROM f
WHERE type = '1'
GROUP BY period
这会产生:
+--------+-------+
| period | maxid |
+--------+-------+
| 1 | 21903 |
| 2 | 21903 |
| 3 | 21903 |
| 4 | 21903 |
| 5 | 21903 |
| 6 | 21903 |
| 7 | 21903 |
| 8 | 21903 |
| 9 | 21903 |
+--------+-------+
我可以看到为什么会发生这种情况,因为我的子查询在获取 ID 时没有考虑任何条件,所以它只是返回表中的最高 ID 。
因此,我的问题是:
- MAX 是如何工作的?有
- 没有一种方法可以产生与 max(id) 类似的结果,但偏移一个结果?
任何帮助将不胜感激!
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你可以这样做,这只是有点可怕:
编辑:
如果每个 id 只属于一个时期,我认为你可以使用这个:
但是,你不会得到只有一行的时期的结果。当然,您可以围绕它进行编码。
You could do this, which is only slightly horrible:
EDIT:
If every id belongs to only one period, I think you can use this:
However, you will not get results for periods with only one row. Of course, you could code around that.
如果我正确理解你的问题,你想要每个时期的第二高 ID,对吗?
这太棒了,当然没有经过测试:
您可能会在标识符“maxid”上遇到一些冲突。
If I understand your question correctly you want the second-highest id for each period, right?
This is ugh-tastic and not tested of course:
You might get some conflicts on the identifier 'maxid'.
在
f(类型、句点、id)
上创建索引,以便快速运行。Create an index on
f (type, period, id)
for this to work fast.