我有一个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个条目也会出现)。
答案 0 :(得分:0)
尝试扩展您的HAVING
子句以包含最后一行。
HAVING ( @i := @i + 1) MOD @everyNthRow = 1 OR @i = @numrows
您可能需要进行实验,因为@i = @numrows - 1
可以提供正确的结果。