2013-12-20 153 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

放手吧。我已經單獨運行了每個子查詢,並且知道它是如何工作的。無論如何,也許你可以爲未來找到答案的人添加詳細的解釋。 –