2010-06-07 289 views
0

假設我有一個非常有大的帶有時間戳字段的MySQL表。所以我想過濾掉一些結果不要有太多的行,因爲我要打印它們。根據時間戳間隔過濾MySQL查詢結果

假設時間戳隨着行數的增加而增加,它們就像每隔一分鐘的平均值(不一定每分鐘一次,例如:2010-06-07 03::14,2010-06-07 03::23,2010-06-07 03: :01,03 2010-06-07::51,2010-06-07 03::21 ...)

正如我前面提到我想篩選出一些記錄,我沒有特定的規則來做到這一點,但我正在考慮按照時間戳間隔過濾出行。在實現過濾之後,我想要一個結果集,它在時間戳之間有一定的分鐘數,平均爲(例如:2010-06-07 03::14,2010-06-07 03::23,2010-06-07 03::01,2010-06-07 03::51,2010-06-07 03::21 ......)

最後但並非最不重要的是,操作應該而不是需要不可思議的時間量,我需要這個功能幾乎快速作爲一個正常的選擇操作。

你有什麼建議嗎?

回答

1

我沒能拿出一個查詢,將做到這一點從我的頭頂,但這裏是我的想法是:

  1. 如果您在一個有很多條目分鐘,找出一種方法來摺疊結果,以便在給定分鐘內有最多1條記錄(DISTINCTDATE_FORMAT也許?)。

  2. 限制的結果通過模的分值,這樣的事情(如果你想從每10分鐘一個條目)數量:

WHERE MOD(MINUTE(tstamp_column, 10)) = 0

+0

我想這些是唯一可能的方法。 – pars 2010-06-11 00:20:07

1

如果你的目標是要過濾記錄,大概你真正想要的是一小部分記錄,但不是第一個10或100。在這種情況下,不僅僅是隨機選擇它們? MySQL RAND()函數將返回一個浮點數n,例如0 < = n < 1.0。將您所需的百分比,以一個浮點數,並使用它像這樣:

SELECT * FROM table 
WHERE RAND() < 0.001 

如果你想重複的結果(用於測試),你可以使用一個種子參數,以強制函數總是返回相同的一組數字。