Я выполняю запрос MySQL, чтобы получить максимальный идентификатор каждой строки, сгруппированной по каждому полю.Я делаю это с:
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 |
+--------+-------+
Это ожидаемый результат.
Однако теперь я хочу выполнить запрос, которыйвозвращает максимальный идентификатор, но один для каждого периода.Я решил, что лучший способ сделать это - использовать параметр смещения в 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 |
+--------+-------+
Я понимаю, почему это происходит, так как мой подзапрос не принимает ни одно из условийв учетную запись при получении идентификатора, поэтому он просто возвращает самый высокий идентификатор в таблице.
Итак, мои вопросы:
- Как работает MAX?и
- Есть ли способ, которым я могу получить результат, аналогичный max (id), но смещенный на один результат?
Любая помощь будет принята с благодарностью!
Спасибо