2013-03-25 2 views
0

상점에 500 개의 키오스크가 있으며 각 인쇄의 타임 스탬프를 상점 ID별로 추적하는 테이블이 있습니다. 몇 초 안에 인쇄물을 구할 수있는 레코드 세트를 만들어야합니다. 이 모든 데이터는 단일 테이블에 저장됩니다. 각 인쇄마다 레코드가 삽입되며 상점 ID W timeStamp가 들어 있습니다.단일 테이블의 행에서 TimeStamp 사이의 mySql TimeDiff

표 NAME = 인쇄
ID    가 STORE_ID     소인
1     1                         2013년 3월 1일 0시 0분 1초
2     2      *
3     3                         2013년 3월 1일 0시 0분 1초
819,                2013년 3월 1일 0시 0분 1초 4          *
5     3                         2013년 3월 1일 0시 0분 6초
6  210             2013년 3월 1일 0시 0분 12초              *

      2013년 3월 1일 0시 0분 15초 나는 가게 # 2 인쇄의 모든 사이의 시간 (초)을 당겨해야합니다. *는 내가 비교할 필요가있는 레코드를 찾을 수있게 해줍니다.다음은

레코드 결과 :

ID는    는     myTimeDiffSeconds
2     2                         0
4     2  을 STORE_ID                   3

이 간단하고 빠르게 할 필요   2         11
6                      . 임시 테이블없이이 작업을 수행 할 수 있습니까?

당신은 세션 변수를

먼저 하나를 사용하여 상호 연관된 쿼리
2를 사용하는 두 가지 방법
1에서 쿼리를 작성할 수 있습니다

+0

몇 가지 답변이 여기에 있습니다. http://stackoverflow.com/questions/5402938/mysql-find-difference-between-rows-of-the-same-table – ethrbunny

답변

1

는 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) 

(timestamp, store_id)에 대한 인덱스는 더 나은 수행을 위해 쿼리를 만듭니다.