2012-03-23 112 views
1

以我MySQL數據庫表有在每次10個分鐘間隔的數據,前 //時間格式 「YYYY-MM-DD HH:MM:SS」MySQL的數據排序,根據該時間間隔

Time    | value 

2012-03-02 1:10:00|2 
2012-03-02 1:20:00|5 
. 
2012-03-02 2:00:00|3 

用戶可以選擇開始時間,結束時間和時間間隔(10分鐘,30,1小時,1天), ex如果用戶選擇開始時間

:2012-03-02 1:15:00,結束時間2012-03-02 2:10:00和間隔爲10分鐘,然後結果

Time    | value. 

2012-03-02 1:15:00|2 
2012-03-02 1:25:00|5 
. 
2012-03-02 2:05:00|3 

值是在時間間隔的最後一個數據,(例如數據15的值將是第10分鐘的值)

我現在做的是我得到了整個數據集在該時間段不考慮(在我的程序中)根據用戶選擇的時間間隔獲取結果, 時間間隔表示:10個薄荷糖,30個薄荷糖,1小時,1天

我的c#程序變得很慢,因爲有很多迭代,他們的任何方式,我可以直接查詢數據庫,並立即獲得數據,您的意見是高度讚賞

回答

0

不是存儲您的時間間隔爲值,您可以通過存儲的時間間隔爲代表開始和結束的時間間隔,像這種兩個DateTime領域避免所有這些問題:

  • UserId
  • StartingInterval:DateTime。
  • EndingInterval:DateTime。

然後你就可以通過減去兩個datetime領域以及通過使用BETWEEN兩個領域陷入了設定的時間間隔的設定數據的獲取時間間隔。

0

我不同意MGA的回答是有意義的,因爲你沒有存儲間隔,你正在存儲事件 - 並且每個事件與一次相關,而不是兩次。

我不太明白你的查詢的輸入,因爲如果用戶給你一個開始時間和結束時間,間隔已經設置好了,不是嗎?我想你只需要一個時間間隔(換句話說,你需要「2012 03 02 10:00:00」和「1小時」或「2012 03 02 10:00:00」和「2012」 03 02 10:10:00「)。

我們假設如果用戶給你一個日期和時間間隔,你的程序可以將它轉換爲開始時間和結束時間,所以你的查詢將得到兩個輸入參數:start_time和end_time。

這裏是一個可行的查詢(測試用命令行的臨時變量):

SELECT value FROM mytable 
WHERE `Time` >= @start_time 
AND `Time` <= @end_time 
ORDER by `Time` DESC 
LIMIT 1; 

你必須處理這種情況沒有什麼是你的程序返回的,當然,這種情況。