Как вы выбираете каждую n-ю строку из mysql
У меня есть ряд значений в базе данных, которые мне нужно вытащить, чтобы создать линейный график. Поскольку я не требую высокого разрешения, я хотел бы пересчитать данные, выбрав каждую 5-ю строку из базы данных.
6 ответов:
SELECT * FROM ( SELECT @row := @row +1 AS rownum, [column name] FROM ( SELECT @row :=0) r, [table name] ) ranked WHERE rownum % [n] = 1
вы могли бы попробовать mod 5, чтобы получить строки, где ID-это кратно 5. (Если у вас есть какой-то столбец ID это порядковый.)
select * from table where table.id mod 5 = 0;
поскольку вы сказали, что используете MySQL, вы можете использовать переменные пользователя для создания непрерывной нумерации строк. Однако вам нужно поместить это в производную таблицу (подзапрос).
SET @x := 0; SELECT * FROM (SELECT (@x:=@x+1) AS x, mt.* FROM mytable mt ORDER BY RAND()) t WHERE x MOD 5 = 0;
добавил
ORDER BY RAND()
чтобы получить псевдослучайную выборку, вместо того, чтобы позволить каждой пятой строке неупорядоченной таблицы быть в выборке каждый раз.
анонимный пользователь попытался изменить это, чтобы изменить
x MOD 5 = 0
доx MOD 5 = 1
. Я изменил его обратно на мой оригинальный.для записи можно использовать любое значение от 0 до 4 в этом состоянии, и нет причин предпочитать одно значение другому.
Я искал что-то подобное. Ответ Тейлора и Билла привел меня к улучшению их идей.
таблица data1 имеет поля read_date, value мы хотим выбрать каждую 2d запись из запроса, ограниченного диапазоном read_date имя производной таблицы произвольно и здесь называется DT
запрос:
SET @row := 0; SELECT * FROM ( SELECT @row := @row +1 AS rownum, read_date, value FROM data1 WHERE read_date>= 1279771200 AND read_date <= 1281844740 ) as DT WHERE MOD(rownum,2)=0