gpt4 book ai didi

sql - 抵消 MySQL Max

转载 作者:行者123 更新时间:2023-11-29 01:46:53 27 4
gpt4 key购买 nike

我正在运行一个 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) 相似的结果,但有一个结果相抵消?

任何帮助将不胜感激!

谢谢

最佳答案

你可以这样做,只是有点可怕:

SELECT DISTINCT ff.period, (
SELECT id
FROM f
WHERE period = ff.period
AND type = '1'
ORDER BY id DESC
LIMIT 1, 1
) as max_id_but_1
FROM f as ff
WHERE type = '1';

编辑:

如果每个 id 只属于一个时期,我想你可以使用这个:

SELECT period, max(id)
FROM f
WHERE type = '1'
AND id NOT IN (
SELECT max(id)
FROM f
WHERE type = '1'
GROUP BY period
)
GROUP BY period;

但是,您不会获得只有一行的时间段的结果。当然,您可以围绕它进行编码。

关于sql - 抵消 MySQL Max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com