MySQL:在表格中选择第一条记录,最后一条记录和200条均匀间隔的记录

时间:2015-10-21 11:00:29

标签: mysql sql

我有一个MySQL表值,从数据记录设备收集了10.000多条记录。 该表格包含以下列:

––––––––––––––––––––––––––––––
| ID  |  Time  | par1 | par2 |
––––––––––––––––––––––––––––––
|  0  |   ..   |  ..  |  ..  |
 ––––––––––––––––––––––––––––––
|  1  |   ..   |  ..  |  ..  |
––––––––––––––––––––––––––––––

..等等。

ID是自动递增的。 我想在表中查询要绘制的值,所以我对选择所有10.000+记录不感兴趣。

如果可能的话,我想用一个MySQL查询选择第一条记录,最后一条记录和200条均匀间隔的记录,以便将结果传递给我的绘图算法。

我已经看到了其他类似的解决方案,其中每一行都从(1,2,3 ..等)开始被选中,如下所述: How to select every nth row in mySQL starting at n

到目前为止,我已经完成了选择第一个记录+ 200个均匀间隔的记录

set @row:=-1;
set @numrows := (SELECT COUNT(*) FROM mytable);
set @everyNthRow := FLOOR(@numrows / 200);

SELECT r.*
FROM ( 
     SELECT *
       FROM mytable
      ORDER BY ID ASC
   ) r
 CROSS
  JOIN ( SELECT @i := 0 ) s
HAVING ( @i := @i + 1) MOD @everyNthRow = 1

但我无法弄清楚如何包含最后一条记录。

如何实现这一目标?

编辑:此外,在应用所需逻辑之前,我想检查表是否实际包含超过200条记录。如果没有,select语句应该只输出每条记录(这样数据记录会话的前200个条目也会出现)。

1 个答案:

答案 0 :(得分:0)

尝试扩展您的HAVING子句以包含最后一行。

HAVING ( @i := @i + 1) MOD @everyNthRow = 1 OR @i = @numrows

您可能需要进行实验,因为@i = @numrows - 1可以提供正确的结果。