我有一个具有以下结构的数据库:
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
.
.
.
使用此 SQL 查询,我可以获得一行和下一行之间的 endTime 和 startTime 之间的平均差异,按主题和 ID 排序,以及它们的最小值、最大值、方差和标准偏差:
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,
MIN(diff) AS minTime,
MAX(diff) AS maxTime
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
这很好用,如果我在同一天只有几行时间差异较小,你可以在这个 sqlfiddle 中看到它:
http://sqlfiddle.com/#!2/6de73/1
但是,当我在另一天获得更多数据时,我得到了错误的值:
http://sqlfiddle.com/#!2/920b6/1
因此,我想计算每一天的平均值、最小值、最大值、方差、标准差。
我知道 MySQL 有 DATE-Functions 但我无法完成...有人可以帮助我吗?还是我必须编写一段可以处理这个问题的 PHP 代码?