我有一个包含GPS
数据的表,我想从中选择具有最小时差的行(基于每行存储的unix-timestamp),例如获取具有最小时间差的跟踪点在整个表格中的7天。
换句话说,我怎样才能在MySQL查询中实现下面的php中的desciped?
$unixtime = 1;
$interval = 60*60*24*7;
while ($unixtime + $interval < date("U")){
$SQLtrack = $wpdb->get_results("SELECT unixtime,latitude,longitude FROM $findmeWP_table WHERE unixtime >= ".$unixtime." ORDER BY unixtime ASC LIMIT 1", ARRAY_A);
foreach ($SQLtrack as $trackpoint) {
// do stuff
}
$unixtime_last = $SQLtrack[count($SQLtrack)-1][unixtime];
if ($unixtime_last){
$unixtime = $unixtime_last + $interval;
} else {
break;
}
}
答案 0 :(得分:1)
以下声明完成了这项工作。但是,您必须以某种方式对结果进行分组。因此,我采用了那个时期内的平均坐标。
"SELECT
CEIL(unixtime / (60*60*24*7)) as weeklyCeiledTime,
AVG(latitude), AVG(longitude)
FROM " . $findmeWP_table . "
WHERE unixtime >= " . $unixtime . "
GROUP BY weeklyCeiledTime";
使用CEIL,您可以将时间戳分成任意间隔范围的组。
答案 1 :(得分:0)
你应该SELF JOIN
select * from tracks t1, tracks t2 WHERE t1.unixtime-t2.unixtime < 3600;
另一种方式:
select * from tracks t1, tracks t2 ORDER BY ABS(t1.unixtime-t2.unxitime) LIMIT 10;
但它很慢!