2009-02-02 38 views
9

我有一個包含數據每分鐘記錄表,所以我必須爲每分鐘一列。當返回數據進行處理時,在過去的6小時內需要這種精確度,但在此之後,較低的精確度就足夠了。每5分鐘一班。如何獲取MySQL中的每一行?

我可以將所有數據返回到一個數組,然後刪除所有,但每5元,但需要用MySQL來返回,然後讀入數組首先數據 - 相當多的數據。

我怎麼能在MySQL回報每一位第n行?我已閱讀提示使用的PrimaryKey%this博客中5 = 0,其中PrimaryKey的是AUTO_INCREMENT但這

一)不使用索引 B)將只返回其中5和缺失的情況下是可分的PrimaryKey值,實際上可能不是每第5行

這可以在SQL查詢中完成,還是需要循環使用遊標結果集中的行?

我在PHP中使用MySQLi連接到數據庫。

回答

3

時間戳列表每5分鐘:

SELECT 
    MIN(logtimestamp) AS first_of_five_minutes 
FROM tLog 
GROUP BY 
    DATE(logtimestamp), 
    HOUR(logtimestamp), 
    MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5) 

現在,你可以用這個作爲一個子選擇由獲得請求的日誌條目將logtimestamps加到first_of_five_minutes上。當然,更多的WHERE -clauses有讓您得到「正確」的時間戳進行內部和外部複製。

此外,請注意,這將返回第一個時間戳,每隔五分鐘的時間間隔,wheras解決方案直接使用minutes%5 = 0只返回logentries這實際上是對的倍數:05,如果你有記錄日誌或類似的延遲,並可能會失敗。

0

完全未經測試,但是這可能工作

SELECT Row, col_a 
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1 
WHERE Row%5 = 0; 
+0

不返回任何東西。 – DavidM 2009-02-02 11:00:55

+0

它是否返回沒有where子句的任何東西?對不起,但我目前無法訪問mysql,所以無法在我的末尾進行測試:( – Learning 2009-02-02 11:04:07