2012-09-26 113 views
6

我有一個帶有一個日期時間列的MySQL表。我想阻止PHP腳本獲取大量數據。所以我正在尋找一種解決方案,即MySql查詢只選擇距離爲1分鐘或其他任何行的行。有沒有簡單的東西,或者我必須每次都用一個新的mysql查詢編寫for-loop代碼。MySQL查詢:在特定時間間隔內獲取數據

Example 
timestamp 
2012-09-25 00:00:00--> 
2012-09-25 00:00:50 
2012-09-25 00:01:23 
2012-09-25 00:01:30--> 
2012-09-25 00:02:33 
2012-09-25 00:02:40 
2012-09-25 00:03:01-->i want those 

在此先感謝

+2

我不明白標準,你爲什麼要那3個? – CrazyCasta

+0

你想選擇每隔幾行?對? –

+0

這只是一個例子。我只是不想在時間00:01:00到00:02:00的所有值,一個就足夠了。在我的真實表格中,例如在1分鐘的間隔中有10個值;減少我只想選擇一個值的數據量。也許是最高的。 – simmi91

回答

0

WHERE timestamp LIKE '%:30:00%'將讓你每隔30秒..

但這個如果你有統一entries..if您的時間戳不全部結束均勻只會工作..你」我們需要讓我們知道。

編輯

我想你可能會尋找這樣的:

How do you select every n-th row from mysql

+0

如果在某個時間間隔內沒有像30那樣的東西,該怎麼辦? – nawfal

+0

這就是問題:P – simmi91

+0

啊......我看到:/ –

1

試試這個

SET @time := '1000-01-01 00:00:00'; 
SET @interval := 60; 

SELECT colDate 
FROM table 
WHERE TIMESTAMPDIFF(SECOND, @time, colDate) >= @interval 
    AND @time := colDate 

它是如何工作。

@interval是當前和之前colDate之間所需的時間差。 TIMESTAMPDIFF中的第一個參數確定間隔將使用的時間單位。例如:第二,一分鐘,小時,日,周,月,季或年。

@time跟蹤以前的colDate,並將其與當前行進行比較。如果前一個和當前colDate之間的差值等於或大於該間隔,則包括它。

+0

我會嘗試並回復它是否工作 – simmi91

+0

...或者你會...... :) –

1

試試這個:

SELECT create_time 
FROM timeTable 
WHERE create_time 
IN (

SELECT min(create_time) 
FROM timeTable 
GROUP BY FROM_UNIXTIME(UNIX_TIMESTAMP(create_time) - MOD(UNIX_TIMESTAMP(create_time) , 60)); 

工作原理:

I)組的日期時間的表四捨五入爲間隔1分鐘(60秒)在這裏。

ii)獲取每組的最上一行。

這可能是一個很好的數據抽樣標準。 這種查詢可以很多在這些問題上進行優化:

我)把where子句約會=所需的日期,然後做小時+分鐘,而不是整個日期時間等操作。 ii)如果您的間隔爲1分鐘,則可以嘗試時間戳或日期格式的子字符串以將其舍入爲最接近的分鐘。

例如。

SELECT create_time 
FROM timeTable 
WHERE create_time 
IN (

SELECT min(create_time) 
FROM timeTable 
GROUP BY DATE_FORMAT(`create_time` , 'Y-M-D %H:%i') 
); 
相關問題