Я пытаюсь взять каждые 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, на предмет правильного синтаксиса, который следует использовать рядом с '(ORDER BY `time`) AS rownum FROM mytable) AS t WHERE t.rownu' в строке 4

Вы можете попробовать здесь:

http://www.sqlfiddle.com/#!9/8074b4/3

0
executable 19 Апр 2019 в 10:41

2 ответа

Лучший ответ

Вы можете эмулировать функцию 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

Демо на dbfiddle

2
Nick 19 Апр 2019 в 07:53
select * from table where id in (select id from table where id%4=0)
1
Fahmi 19 Апр 2019 в 12:06