2012-11-30 85 views
2

我有一個表trip_data。每隔一秒我會收到數據包並將數據插入數據庫。 trip_data表包含四個fields.trip_paramid,fuel_content,creation_time&vehicle_id。我想要選擇創建時間爲2分鐘(不完全是2.大約2)之間的差異的所有行。 trip_data表包含40缺乏rows.So我需要一個優化的選擇查詢this.Can人對this.Here幫助是表架構的trip_table &樣本數據..Mysql查詢查找指定行

SQlFiddle demo

+0

什麼shud是樣本輸出你期待在這裏? – AnandPhadke

+0

輸出應該包含字段trip_paramid,fuel_content,creation_time&vehicle_id。如果我們對後續行(即輸出中)的「creation_time」字段進行區分,那麼它應該大約2分鐘。 – vmb

+0

@vmb假設第1行包含2012-11-08 01:21:37,第2行包含2012-11-08 01:25:37。這裏時差超過2分鐘。所以我應該顯示哪一個2012-11-08 01:21:37或2012-11-08 01:25:37 ?? –

回答

1
SELECT 
    tp.* 
FROM 
    trip_parameters tp 
GROUP BY 
    CONVERT(UNIX_TIMESTAMP (tp.creation_time)/(2*60), unsigned) 
ORDER BY 
    tp.creation_time asc 

注意,使用UNIX_TIMESTAMP不ñ OT允許您處理超過2037年的日期使用以下,而不是解決問題:

CONVERT(TIMESTAMPDIFF(SECOND,'1970-01-01 00:00:00',tp.creation_time)/(2*60), unsigned) 
+0

我會測試它.. – vmb

+0

查詢工作正如我提到的問題,它是一個優化的查詢? – vmb

+0

查詢本身很簡單,並沒有真正的內置瓶頸。對你來說最重要的是確保你的表有適當的索引(在你的情況下,特別是column:creation_time,因爲你最有可能通過creation_time限制結果來獲取數據)。我實際上正在處理一個處理大量實時機器測量數據的項目,並且正確的索引是最重要的(對於任何數據庫)。 – heikkim

-1

試試這個

SELECT trip_paramid, fuel_content, creation_time, vehicle_id 
FROM trip_parameters 
GROUP BY FLOOR(UNIX_TIMESTAMP(creation_time)/120) 

這需要每2分鐘塊的一個項目

+0

我認爲這個答案是錯誤的,因爲當我執行上面的查詢我得到了2012-11-08 01:21:37,2012-11-08 01:22:37之間的區別兩個不是兩分鐘。請更正您的答案 –

+0

是的,這會從每2分鐘塊中取出一個值,塊屏障是2012-11-08 01:22因此第一個值來自不同的塊,而不是下一個塊。我認爲我的答案與heikkim的正確答案非常相似,只是四捨五入的時間不同,我沒有訂購數字。 –

0

可以使用MYSQL User defined variables做一個表掃描。不幸的是,UDV的數據類型有限(整數,小數,浮點,二進制或非二進制字符串)。因此,在此查詢中,我使用char @ti變量來存儲使用CAST的以前的日期時間,並將其與Creation_time字段進行比較。也因爲這個變量我設置爲(NOW() - 10000000)初值你可以使用任何你約會希望低於MIN(CREATION_TIME)

這裏是SQLFiddle demo

select * from 
(
select trip_parameters.*, 
if(ABS(TIMESTAMPDIFF(MINUTE,Creation_time,cast(@ti as datetime)))>=2,1,0) t, 
@ti:=if(ABS(TIMESTAMPDIFF(MINUTE,Creation_time,cast(@ti as datetime)))>=2, 
          cast(Creation_time as char(100)),@ti) 
from trip_parameters, 
    (select @ti:=cast(now()-10000000 as char(100))) a 
order by creation_time 
) t2 
where T=1 
order by creation_time 
+0

查詢正在工作..但執行時間非常長 – vmb