你如何从MySQL中select每一个第n行
我在数据库中有一系列的值,我需要创build一个折线图。 因为我不需要高分辨率我想从数据库中select每第五行重新采样数据。
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,你可以使用用户variables来创build一个连续的行编号。 但是你必须把它放在派生表(子查询)中。
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
。 我已经把它改回原来的。
为了logging,在这种情况下可以使用0到4之间的任何值,没有理由偏好一个值。
SET @a = 0; SELECT * FROM t where (@a := @a + 1) % 2 = 0;
我一直在寻找这样的东西。 泰勒和比尔的回答让我改进了他们的想法。
表data1的字段为read_date,我们希望从read_date范围限定的查询中select每个2dlogging,派生表的名称是任意的,这里称为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
$Query = "SELECT * FROM ( SELECT @row := @row +1 AS rownum, posts.* FROM ( SELECT @row :=0) r, posts ) ranked WHERE rownum %3 =1";
post是我的表格: