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の間の間隔はOKですが、2と3の間はOKではありません。

一時テーブルやストアドプロシージャなどを使用せずにこれを解決するためのヒントはありますか?

よろしくお願いします

solick

編集:テーブルを更新しました。エントリの間に他のデバイスからのタイムスタンプがあります。

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

結果

| ID | TIME_DIFF |
------------------
| 1 | 15 |
| 2 | 21 |

SQLフィドル

于 2013-01-07T16:22:35.987 に答える
0

解決:

njkは私に正しいヒントを与えてくれますが、最後にストアドプロシージャとtemopraryテーブルを使用する必要がありました。

ここで重要: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
于 2013-01-08T07:40:21.777 に答える