0

我有一个关于时间戳间隔计算的问题:

假设我有一个带有 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之间的间隔不行。

任何提示如何在不使用临时表和存储过程等的情况下解决这个问题?

预先感谢和亲切的问候

索利克

编辑:更新了表格。条目之间有来自其他设备的时间戳。

4

2 回答 2

2

你可以从这个开始。这将与自身连接表格并计算 +1id以计算以秒为单位的差异。

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

结果

| 身份证 | TIME_DIFF |
------------------
| 1 | 15 |
| 2 | 21 |

SQL小提琴

于 2013-01-07T16:22:35.987 回答
0

解决方案:

njk 给了我正确的提示,但最后有必要使用存储过程和临时表:

这里很重要:临时表不能在查询中多次使用,因此我需要复制临时表:

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
于 2013-01-08T07:40:21.777 回答