MySQL - 选择具有最小差异的行

时间:2014-07-23 10:41:12

标签: php mysql

我有一个包含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;
    }
}

2 个答案:

答案 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;

但它很慢