2014-03-03 80 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; 
相關問題