2013-12-20 155 views
1

我有一个数据库,其中有来自gps发件人的很多行。 GPS有1秒的延迟发送下一行到数据库。所以我想要做的是一个Web界面,显示旅行,我不想显示太多的行,我想分组的行旅行。所以我想要做的是查询谁可以通过检查它是否超过14分钟到下一行来声明旅行/旅行,如果它是在给它一个旅行号码之前做出所有行的一行,否则将它添加到“旅行”收藏。按时间间隔划分组的行

+0

你可以加载样本数据的sqlfiddle.com - 就像一个十几行,代表一个3-4的旅行?示例表只需要具有logid和datetime字段。 – AgRizzo

+0

现在你可以在quastion中看到@AgRizzo –

回答

2

试试这个(例如为http://sqlfiddle.com/#!2/a0c86/39

SELECT Trip, MIN(Date_Time), MAX(Date_Time) 
FROM (
    SELECT @Trip := IF(TIMESTAMPDIFF(MINUTE, @Date_Time, Date_Time) <= 20, @Trip, @Trip+1) AS TRIP 
    , logid 
    , @Date_Time := Date_time AS Date_Time 
    FROM gpslog 
    JOIN (SELECT @TRIP := 1, @Date_Time := null) AS tmp 
    ORDER BY Date_Time) AS triplist 
GROUP BY Trip 
+0

该死的男人,你太棒了!非常感谢@agrizzo –

+0

@AgRizzo,真棒解决方案。我在这里遇到了类似的问题,你的查询对我来说完美无缺。但是,请你解释它是如何工作的吗? –

+0

放手吧。我已经单独运行了每个子查询,并且知道它是如何工作的。无论如何,也许你可以为未来找到答案的人添加详细的解释。 –