2010-07-09 3 views
3

일련의 센서 판독 값에 대해 날짜 시간 스탬프를 제공하는 데이터베이스에 열이 있습니다. 나는 그 판독 값을 끊어지지 않고 연속적인 센서 판독 값으로 나누고 싶습니다. 센서 판독 값이 깨지면 날짜 시간 열에 불연속이 생깁니다. 그래서 datetime 열에 대한 쿼리를 수행하고 연속적인 판독 값 간의 차이를 계산하고 싶습니다. 내 쿼리를 가정하면mysql에서 datatime 행의 시간 델타를 찾는 방법은 무엇입니까?

입니다 :

select sensor_time from sensor_table limit 10;

내가 얻을 것 :이 예에서는

+---------------------+ 
| sensor_time   | 
+---------------------+ 
| 2009-09-28 07:08:12 | 
| 2009-09-28 07:08:40 | 
| 2009-09-28 07:09:10 | 
| 2009-09-28 07:09:40 | 
| 2009-09-28 07:10:10 | 
| 2009-09-28 07:10:40 | 
| 2009-09-28 07:41:10 | 
| 2009-09-28 07:41:40 | 
| 2009-09-28 07:42:10 | 
| 2009-09-28 07:42:40 | 
+---------------------+ 

시간이 갑자기 7시 41분에 7시 10분에서 점프하는 내가 좋겠 감지하고 싶습니다. 내 질문은이 10 datetime 스탬프에 대한 9 시간 차이를 계산할 수있는 방법입니까? timediff()를 전체 쿼리에 적용 할 수있는 방법이 있습니까?

답변

9

MySQL에서는 변수를 사용하여 각 행의 센서 시간을 저장 한 다음 시간차를 계산할 때 다음 행에서이를 사용할 수 있기 때문에 이것은 매우 쉽습니다. 이 기술은 데이터를 반환하는 SELECT에 변수를 할당 할 수 없기 때문에 MS SQL에서는 작동하지 않습니다. 아마도 다른 버전의 SQL에서는 작동하지 않을 것입니다. 일반적인 방법은 조인이 이전 행의 값을 반환하는 오프셋 조인을 만드는 것이지만 매우 느릴 수 있습니다. 팁을위한

SELECT 
    sensor_time, 
    time_diff, 
    TIME_TO_SEC(time_diff) > 30 AS alarm 
FROM (
    SELECT 
     sensor_time, 
     TIMEDIFF(sensor_time, @prev_sensor_time) AS time_diff, 
     @prev_sensor_time := sensor_time AS prev_sensor_time 
    FROM sensor_table, 
    (SELECT @prev_sensor_time := NULL) AS vars 
    ORDER BY sensor_time ASC 
) AS tmp; 

+---------------------+-----------+-------+ 
| sensor_time   | time_diff | alarm | 
+---------------------+-----------+-------+ 
| 2009-09-28 07:08:12 | NULL  | NULL | 
| 2009-09-28 07:08:40 | 00:00:28 |  0 | 
| 2009-09-28 07:09:10 | 00:00:30 |  0 | 
| 2009-09-28 07:09:40 | 00:00:30 |  0 | 
| 2009-09-28 07:10:10 | 00:00:30 |  0 | 
| 2009-09-28 07:10:40 | 00:00:30 |  0 | 
| 2009-09-28 07:41:10 | 00:30:30 |  1 | 
| 2009-09-28 07:41:40 | 00:00:30 |  0 | 
| 2009-09-28 07:42:10 | 00:00:30 |  0 | 
| 2009-09-28 07:42:40 | 00:00:30 |  0 | 
+---------------------+-----------+-------+ 
+0

감사 :

말했다

, 여기 MySQL의에서 할 수있는 한 가지 방법입니다! –

관련 문제