我对使用时间戳的间隔计算有疑问:
假设我有一个包含ID和时间戳的表:
Table tab1
tab1.id deviceid timestamp
------- -------- ----------
1 15 2013-01-01 14:57:54
2 15 2013-01-01 14:58:09
3 23 2013-01-01 14:58:10
4 15 2013-01-01 14:58:30
我想要做的是检查条目之间的间隔是否在特定值之内或之外。我们假设值为15秒:
介于1和2之间的时间间隔正常,介于2和3之间则不行。
如何在不使用临时表和存储过程等的情况下解决这个问题。
提前致谢并致以亲切的问候
solick
编辑:更新了表格。条目之间有来自其他设备的时间戳。
答案 0 :(得分:2)
你可以从这开始。这会将表格与自身联系起来并计算+1 id
来计算以秒为单位的差异。
SELECT a.id,
TIME_TO_SEC(TIMEDIFF(b.timestamp, a.timestamp)) AS time_diff
FROM tab1 a
LEFT JOIN tab1 b ON b.id = a.id + 1
WHERE b.id IS NOT NULL
<强>结果强>
| ID | TIME_DIFF | ------------------ | 1 | 15 | | 2 | 21 |
答案 1 :(得分:0)
解决方案:
njk给了我正确的提示,但最后有必要使用存储过程和temoprary表:
重要的是:在查询中不能多次使用自动换行表,因此我需要复制临时表:
BEGIN
DROP TEMPORARY TABLE IF EXISTS tmptable1;
DROP TEMPORARY TABLE IF EXISTS tmptable2;
CREATE TEMPORARY TABLE tmptable1 (tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT * FROM tbl_source WHERE tbl_source.Id = did;
CREATE TEMPORARY TABLE tmptable2 AS (SELECT * FROM tmptable1);
SELECT a.tmpid, a.timestamp, TIME_TO_SEC(TIMEDIFF(b.timestamp, a.timestamp)) AS time_diff
FROM tmptable1 a LEFT JOIN tmptable2 b
ON b.tmpid = a.tmpid +1
WHERE b.tmpid IS NOT NULL;
DROP TEMPORARY TABLE IF EXISTS tmptable1;
DROP TEMPORARY TABLE IF EXISTS tmptable2;
END