2014-03-03 45 views
0

我有一系列基于时间的mysql数据点。假设时间间隔为1秒,最高可达30000秒。这些值总是相同或随着时间值的增加而减少,并且呈指数下降的方式下降(开始快,然后非常缓慢)。确切的比例并未设定或未知。因此,例如:Mysql,得到不同的时间间隔的数值计数

duration_seconds, value 
1, 900 
2, 898 
3, 897 
... 
1000, 300 
1001, 300 
1002, 299 
1003, 299 
... 
15000,100 
.. 
20000,99 
.. 
30000,99 

首先,这些数字始终是唯一的,或者是每秒1个唯一值。在中间,每分钟可能有30个唯一值。最后,每30分钟可能有1个独特的值。

我想确定在整个足够范围内每分钟唯一值的数量以模拟此曲线。我只需要存储唯一的值,但是我想知道插入所有数据的频率。

我想使用一个查询来基本上做到这一点,时间间隔高达30000.如300秒。并获得每个范围内唯一值的计数。是否有某种我可以使用的分组方法?

SELECT 0,300,count(distinct value) FROM data WHERE duration_seconds >= 0 AND duration_seconds <= 300; 
SELECT 300,600,count(distinct value) FROM data WHERE duration_seconds >= 300 AND duration_seconds <= 600; 
SELECT 600,1200,count(distinct value) FROM data WHERE duration_seconds >= 600 AND duration_seconds <= 1200; 
... 

一个子问题可能是,我如何根据变化率来确定理想范围?例如0-300开局不错,但1200-3600中途可能更好,20000-30000可能最好结束,因为最终的分数变化不大。

回答

2

你应该能够做到像下面找到值的范围内每300个单位的

SELECT (duration-1) DIV 300 * 300 AS low 
    , (duration-1) DIV 300 * 300 + 300 AS high 
    , COUNT(DISTINCT value) 
FROM data 
GROUP BY low, high 
ORDER BY low, high; 
相关问题