如何在MySQL中从每10行中选择1行

4
我正在将给定信号的实时变化记录到数据库表中。
然后我画出线性图来可视化信号水平的变化。
我想要获取表格中第(10n+1)行,以绘制一个简略的图表。10是任意的。用户可以将其更改为其他值。
有人知道如何使用MySQL查询来实现这一点吗?
如果不知道,我将在选择所有数据后使用PHP来完成。
我的表结构如下:
|id        |signal1   |signal2   | signal 3   |
+----------+----------+----------+------------+
|1         |0.41452   | 1.32135  | 0.31231    |
...

你的表结构是什么样子的? - Aleks G
你可以在条目的时间上使用 group by(格式为 y-m-d H:i)进行分组,或者更准确地使用行号。https://dev59.com/9HA75IYBdhLWcg3wv73A - Waygood
你需要像这样记录编号1、10、20、30、40和50吗?如果只有50条记录。 - JDGuide
2个回答

4
如果您有一个自增id列,您可以选择被n整除的行。
SELECT * FROM tableName1 WHERE MOD(id,10)=0; 
// id divided by 10 with a remainder equal to 0 (exact)

或者没有连续的列ID

SELECT * FROM ( 
    SELECT 
        @row := @row +1 AS rowNum, colName1 
    FROM ( 
        SELECT @row :=0) r, tableName1
    ) ranked 
WHERE rowNum % 10 = 1 

2
请注意,仅当编号中没有间隙(没有删除行)时,使用mod(id, 10)才会给出正确的结果。 - Jocelyn

0
如果您的表具有自动增量ID(intID),则应尝试此代码。我的表中只有26条记录。
select * from tablename where intId 
        in (select case  (intId%10=0) when 1 then intId else 0 end as x from tablename )

输出:

10  sdf KK201300010 123456  Regular
20  sdf KK201300020 123456  Regular

它将在每10个记录中显示每个记录。 希望它能帮到你。


我想将您推荐的代码实现到一个网站中,但我有几个问题。这段代码确切地是什么意思?它如何翻译?“end as x”在这里是做什么的?您是否有建议如何最好地与PHP一起使用它? - Rookie Recruits
为了更好地说明,我正在尝试选择每一百行。我正在尝试创建一个下一页按钮,每次单击下一页按钮或箭头时都会提取每100行。就像分页一样,但没有页面编号。 - Rookie Recruits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接