Как выбрать n строку из таблицы, где есть 300'000 строк - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь взять каждые 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.rownu 'в строке 4

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

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

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

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

1 голос
/ 19 апреля 2019
select * from table where id in (select id from table where id%4=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...