[mysql] mysql에서 모든 n 번째 행을 어떻게 선택합니까?

꺾은 선형 차트를 만들기 위해 가져와야하는 일련의 값이 데이터베이스에 있습니다. 고해상도가 필요하지 않기 때문에 데이터베이스에서 5 번째 행을 모두 선택하여 데이터를 다시 샘플링하고 싶습니다.



답변

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 사이의 값을 사용할 수 있으며 한 값을 다른 값보다 선호 할 이유가 없습니다.


답변

SET @a = 0;
SELECT * FROM t where (@a := @a + 1) % 2 = 0;


답변

나는 이와 같은 것을 찾고 있었다. Taylor와 Bill의 대답은 제가 그들의 아이디어를 개선하도록 이끌었습니다.

data1 테이블에는 read_date 필드가 있으며, read_date 범위로 제한되는 쿼리에서 모든 2d 레코드를 선택하려는 값은 파생 테이블의 이름은 임의적이며 여기서는 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


답변

이 쿼리를 사용할 수 있습니다.

set @n=2; <!-- nth row -->
select * from (SELECT t.*,
       @rowid := @rowid + 1 AS ID
  FROM TABLE t,
       (SELECT @rowid := 0) dummy) A where A.ID mod @n = 0;

또는 nn 번째 값으로 바꿀 수 있습니다.


답변

SELECT *
FROM (
    SELECT @row := @row +1 AS rownum, posts.*
    FROM (
        SELECT @row :=0) r, posts
    ) ranked
WHERE rownum %3 = 1

게시물은 내 테이블입니다.