Mic*_*ier 6 php sql sqlite variance
我有一个具有以下结构的SQLite数据库:
rowid ID startTimestamp endTimestamp subject
1 00:50:c2:63:10:1a 1000 1090 entrance
2 00:50:c2:63:10:1a 1100 1270 entrance
3 00:50:c2:63:10:1a 1300 1310 door1
4 00:50:c2:63:10:1a 1370 1400 entrance
.
.
.
Run Code Online (Sandbox Code Playgroud)
我在这里准备了一个sqlfiddle:http://sqlfiddle.com/#!2/fe8c6/2
使用此SQL-Query,我可以获得endTime和一行与下一行之间的startTime之间的平均差异,按主题和ID排序:
SELECT
id,
( MAX(endtimestamp) - MIN(startTimestamp)
- SUM(endtimestamp-startTimestamp)
) / (COUNT(*)-1) AS averageDifference
FROM
table1
WHERE ID = '00:50:c2:63:10:1a'
AND subject = 'entrance'
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
我的问题:要计算平均值是没有问题的,这就是查询.但是,我怎样才能得到标准偏差和这些值的方差?
首先通过将表连接到自身并按 ID 分组来查找感兴趣的时间差异,然后查找平均值、方差V(x) = E(x^2) - (E(x))^2
和标准差,如下sqrt(V)
所示
SELECT ID, AVG(diff) AS average,
AVG(diff*diff) - AVG(diff)*AVG(diff) AS variance,
SQRT(AVG(diff*diff) - AVG(diff)*AVG(diff)) AS stdev
FROM
(SELECT t1.id, t1.endTimestamp,
min(t2.startTimeStamp) - t1.endTimestamp AS diff
FROM table1 t1
INNER JOIN table1 t2
ON t2.ID = t1.ID AND t2.subject = t1.subject
AND t2.startTimestamp > t1.startTimestamp -- consider only later startTimestamps
WHERE t1.subject = 'entrance'
GROUP BY t1.id, t1.endTimestamp) AS diffs
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12899 次 |
最近记录: |