【问题标题】:Differences between timestamps in MySQL TableMySQL表中时间戳之间的差异
【发布时间】:2013-01-07 16:15:22
【问题描述】:

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

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

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

提前致谢和亲切的问候

松软

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

【问题讨论】:

    标签: mysql intervals timestamp


    【解决方案1】:

    你可以从这个开始。这将与自身连接表格并计算 +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
    

    结果

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

    SQL Fiddle

    【讨论】:

    • 您好,谢谢:我正在考虑这个想法,但不幸的是,实际上在来自不同设备的条目之间存在严重的 ID。因此这是行不通的。
    • 您的意思是为一个设备创建一个包含所有行的临时表,并在那里添加一个新 id 并为每个设备单独执行此操作?
    • @solick 您当然可以这样做或使用变量来创建 ID。
    【解决方案2】:

    解决方案:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 2012-11-28
      • 2011-02-02
      • 2017-01-22
      • 2011-06-13
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多