1

私はMySQLが初めてで、ログテーブルの行間で経過した時間を計算する方法を理解しようとしています.

このテーブルは、 ID 、 Hostname 、 Info 、 Timestamp を持つ基本的なテーブルで、次のようなデータがあります。

+---+----------+-------------------+---------------------+
|ID | Hostname | Info              | Timestamp           |
+---+----------+-------------------+---------------------+
|445| switch1  | "port 1 inserted" | 2013-01-19 19:51:40 |
|446| switch1  | "port 2 inserted" | 2013-01-19 19:59:41 |
|447| Router2  | "alarm fan speed" | 2013-01-19 20:00:40 |
|448| switch1  | "alarm fan speed" | 2013-01-19 20:12:20 |
|449| Router2  | "alarm fan speed" | 2013-01-19 21:42:41 |
+---+----------+-------------------+---------------------+

したがって、基本的には、同じ HOSTNAME を持つ行間の時間差を取得したいと考えています。この場合、行 445 と行 446 の間では、8 分 1 秒になります。446 と 448 の間では、12 分 39 秒になります。等々...

これに関するヒントは大歓迎です。

4

2 に答える 2

1

これにより、行間の時間差が秒単位で得られます。

SELECT c.info, 
       CASE 
         WHEN f.`timestamp` IS NOT NULL THEN 
         Timestampdiff(second, f.`timestamp`, 
         c.`timestamp`) 
         ELSE NULL 
       end AS time_diff 
FROM   (SELECT @rowa := @rowa + 1 AS id, 
               a.hostname, 
               a.info, 
               a.`timestamp` 
        FROM   sparkles a 
               JOIN (SELECT @rowa := 0) b 
        WHERE  a.hostname = 'switch1') c 
       LEFT JOIN (SELECT @rowb := @rowb + 1 AS id, 
                         d.hostname, 
                         d.info, 
                         d.`timestamp` 
                  FROM   sparkles d 
                         JOIN (SELECT @rowb := 0) e 
                  WHERE  d.hostname = 'switch1') f 
              ON f.id = c.id - 1 

結果( switch1を としてhostname)

| | 情報 | TIME_DIFF |
-------------------------------
| | ポート 1 が挿入されました | (ヌル) |
| | ポート 2 が挿入されました | 481 |
| | アラームファン速度 | 759 |

デモを見る

結果Router2の場合hostname

| | 情報 | TIME_DIFF |
-------------------------------
| | アラームファン速度 | (ヌル) |
| | アラームファン速度 | 6121 |

デモを見る

于 2013-01-19T19:12:28.543 に答える
0

これを試して:

SELECT id, IF(@lastdate = '', NULL, TIMESTAMPDIFF(SECOND, TIMESTAMP, @lastdate)), 
       @lastdate:=TIMESTAMP 
FROM tablename, (SELECT @lastdate:='') a;
于 2013-01-19T19:23:15.710 に答える