Mysql,按时间间隔获取不同的值计数

时间:2014-03-03 23:19:21

标签: mysql time unique

我基于时间在表格中有一系列的mysql数据点。假设间隔为每秒1次,最多可达30000秒。随着时间值的增加,值总是相同或减小,并且以指数递减的方式减小(快速开始,然后朝向末端非常慢)。确切的速率未设置或已知。所以,例如:

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可能最好结束,因为这些点最终变化很小。

1 个答案:

答案 0 :(得分: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;