我有两张表,一张表存储各种用户的 GPS 数据,另一张表存储基于 GPS 经纬度值和时间戳差异的用户空闲时间。
表T1内容:
id uid latitude longitude received_time imno
435 25 13.041868 80.198868 2014-08-07 15:53:00 352944054874253
436 25 13.041862 80.198868 2014-08-07 15:54:00 352944054874253
437 25 13.041869 80.198868 2014-08-07 15:55:00 352944054874253
438 25 13.041887 80.198871 2014-08-07 15:55:38 352944054874253
439 25 13.041887 80.198871 2014-08-07 15:55:42 352944054874253
440 25 13.041887 80.198871 2014-08-07 15:55:47 352944054874253
441 25 13.041887 80.198871 2014-08-07 15:55:52 352944054874253
442 25 13.041887 80.198871 2014-08-07 15:56:00 352944054874253
Run Code Online (Sandbox Code Playgroud)
我必须比较具有相同纬度和经度值的行。
如果前一行的经纬度与下一行的经纬度相同,则计算时间戳差,直到下一行的经纬度值不相等。
例如,从 ID 438 到 442,纬度和经度值相同,所以我必须计算:
timediff = 442 received - 438 received time (in minutes)
Run Code Online (Sandbox Code Playgroud)
并将其存储在表 T2 中,如:
id uid latitude longitude idle_time imno
1 25 13.041887 80.198871 2014-08-07 00:01:38 352944054874253
start_time end_time
2014-08-07 15:55:38 2014-08-07 15:56:00
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
小智 0
假设idt1 和 t2 都有 Primary_key 和自动增量列,我认为这就是您所需要的:
CREATE TRIGGER trig1
AFTER INSERT ON t1
FOR EACH ROW
BEGIN
IF @latitude = NEW.latitude AND @longitude = NEW.longitude THEN
SET @end_time = NEW.received_time;
SET @iddle_time = TIMEDIFF(NEW.received_time, @start_time);
UPDATE t2 SET iddle_time = @iddle_time, end_time = @end_time
WHERE id = @last_id_t2;
ELSE
INSERT INTO t2 VALUES (NULL, NEW.uid, NEW.latitude, NEW.longitude,
NULL, NEW.imno, NEW.received_time, NEW.received_time);
SET @last_id_t2 = LAST_INSERT_ID();
SET @latitude = NEW.latitude; SET @longitude = NEW.longitude;
SET @iddle_time = NULL;
SET @start_time = NEW.received_time; SET @end_time = NEW.received_time;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
您可以在这里看到整个方案:http://sqlfiddle.com/#!2/a70ac /1
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |