#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь взять каждые 4 строки из своей таблицы, но у меня какая-то ошибка с моим запросом.
Вот моя таблица :
id | IfInOctets | IfOutOctets | inDiff | outDiff | time | timeDiff
---------------------------------------------------------------------------
1 | 283994207 | 117876089 | 1716 | 52872 | 1555658221 | 59
2 | 283995596 | 117928892 | 1389 | 52803 | 1555658282 | 61
3 | 283995978 | 117929215 | 382 | 323 | 1555658341 | 59
4 | 283996278 | 117929407 | 300 | 192 | 1555658402 | 61
5 | 283996595 | 117929703 | 317 | 296 | 1555658461 | 59
6 | 283998848 | 117932946 | 2253 | 3243 | 1555658522 | 61
7 | 284001482 | 117935214 | 2634 | 2268 | 1555658581 | 59
8 | 284001824 | 117935472 | 342 | 258 | 1555658642 | 61
9 | 284004728 | 117939762 | 2904 | 4290 | 1555658701 | 59
Мой запрос :
SELECT t.id, t.time
FROM
(
SELECT id, `time`, ROW_NUMBER() OVER (ORDER BY `time`) AS rownum
FROM monitor
) AS t
WHERE t.rownum % 25 = 0
ORDER BY t.time
Ошибка :
1064 У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с ‘(ПОРЯДОК ПО `времени`) КАК rownum ИЗ mytable ) КАК t, ГДЕ t.rownu’ в строке 4
Вы можете попробовать здесь :
Комментарии:
1. какая у вас версия БД — она работает здесь — dbfiddle.uk /…
2. Похоже, вы не используете MySQL 8 …
3. Вот версия
mysql Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1
4. Версия 5.5 не поддерживает оконные функции.
5. @executable MySQL представил функцию ROW_NUMBER() начиная с версии 8.0.
Ответ №1:
Вы можете эмулировать ROW_NUMBER()
функцию, используя переменные в MySQL до версии 8.0:
SELECT t.id, t.time
FROM (SELECT id, time, @rownum := @rownum 1 AS rownum
FROM monitor
CROSS JOIN (SELECT @rownum := 0) r
ORDER BY time) t
WHERE t.rownum % 4 = 0
ORDER BY t.time
Вывод (для ваших выборочных данных):
id time
4 1555658402
8 1555658642
Ответ №2:
select * from table where id in (select id from table where id%4=0)