单个表行中TimeStamp之间的mySql TimeDiff

时间:2013-03-25 16:55:38

标签: mysql

我在商店里有500个自助服务终端,并有一个表格,可以按商店ID跟踪每个印刷品的时间戳。我需要生成一个记录集,它可以在几秒钟内为我提供打印之间的时间。所有这些数据都存储在一个表中。为每个打印插入一条记录,并包含商店ID和timeStamp。

TABLE NAME =打印
ID STORE_ID时间戳
1 1 2013-3-1 00:00:01
2 2 2013-3-1 00:00:01 *
3 3 2013-3-1 00:00:01
4 2 2013-3-1 00:00:12 *
5 3 2013-3-1 00:00:06
6 2 2013-3-1 00:00:15 *

我需要在所有商店#2打印之间以秒为单位拉动时间。 *是这样你就可以找到我需要比较的记录。

下面的RecordSet结果:

ID STORE_ID myTimeDiffSeconds
2 2 0
4 2 11
6 2 3

这需要简单快速。我可以在没有临时表的情况下这样做吗?

1 个答案:

答案 0 :(得分:2)

您可以通过两种方式编写查询 1.使用相关查询
2.使用会话变量

第一个正是ethrbunny所指出的

mysql> SELECT t1.id,
          t1.store_id,
          timestampdiff(second,IFNULL( (SELECT MAX(t2.timestamp) 
                                          FROM print t2 
                                         WHERE t2.store_id=2 
                                               AND t2.timestamp< t1.timestamp)
                       ,t1.timestamp),t1.timestamp) myTimeDiffSeconds
     FROM print t1 
    WHERE t1.store_id=2 ORDER BY t1.timestamp;
+------+----------+-------------------+
| id   | store_id | myTimeDiffSeconds |
+------+----------+-------------------+
|    2 |        2 |                 0 |
|    4 |        2 |                11 |
|    6 |        2 |                 3 |
+------+----------+-------------------+
3 rows in set (0.00 sec)

另一种方法是使用会话变量来保存上一次,但在这种情况下我们需要第一次获得最小时间戳

mysql> select min(p.timestamp) into @prev_time from print p where p.store_id=2;
Query OK, 1 row affected (0.00 sec)

mysql> select id,
          store_id,
          timestampdiff(second,@prev_time,timestamp) myTimeDiffSeconds,
          @prev_time:=timestamp 
     from print 
    where store_id=2 order by timestamp;
+------+----------+-------------------+---------------------+
| id   | store_id | myTimeDiffSeconds | @prev_time:=t       |
+------+----------+-------------------+---------------------+
|    2 |        2 |                 0 | 2013-03-01 00:00:01 |
|    4 |        2 |                11 | 2013-03-01 00:00:12 |
|    6 |        2 |                 3 | 2013-03-01 00:00:15 |
+------+----------+-------------------+---------------------+
3 rows in set (0.00 sec)