2014-10-06 15 views
0

我的任務是從數據庫檢索數據,用戶可以選擇開始時間。例如,如果用戶從13:00開始選擇並且當時沒有結果,那麼讀數應該在開始前一分鐘(12:59)開始,如果在開始前兩分鐘(12:58)仍然沒有結果,直到找到結果爲止。這是我到目前爲止已經嘗試沒有成功:C#從數據庫檢索數據匹配用戶的開始時間

string str1 = dtFrom.ToString("yyyy-MM-dd HH:mm"); 
string str2 = dtTo.ToString("yyyy-MM-dd HH:mm"); 

bool b = true; 
while (b) 
{ 
    string SQLCommand = "Select * From tbl Where Time Between @from AND @to AND Id = @id "; 
    using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
    { 
     con.Open(); 
     SQLiteCommand cmd = new SQLiteCommand(SQLCommand, con); 
     cmd.Parameters.AddWithValue("@from", str1); 
     cmd.Parameters.AddWithValue("@to", str2); 
     cmd.Parameters.AddWithValue("@id", id); 

     using (SQLiteDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       DateTime time = DateTime.Parse(reader[0].ToString()); 
       double value = double.Parse(reader[1].ToString()); 
       if (time.Minute < dtFrom.Minute) 
       { 
        // Add values.. 
        b = false;   
       } 
       else 
       { 
        dtFrom = dtFrom.AddMinutes(-1); 
        str1 = dtFrom.ToString(); 
        b = true; 
        break; 
       } 
      } 
     } 
    } 
}    
return list; 
+1

難道你不能只按順序排序記錄下第一個記錄嗎? – paul 2014-10-06 11:48:38

+0

我正在執行插值,如果沒有這樣的記錄,應該先讀取讀數。 – Doro 2014-10-06 11:50:20

+0

我不得不同意保羅。你爲什麼不把你的查詢改爲'「選擇top 1 *從tbl Where Time <= @to AND Id = @id」'。這對我來說沒有意義,爲什麼你會限制搜索的起點...... – 2014-10-06 12:23:22

回答

0

要在或時間之前拿到最新項,請使用ORDER BY和限制,或者乾脆MAX():

SELECT MAX(Time) 
FROM tbl 
WHERE Time <= @from 

然後可以使用這個值作爲下限:

SELECT * 
FROM tbl 
WHERE Time BETWEEN (SELECT MAX(Time) 
        FROM tbl 
        WHERE Time <= @from) 
       AND @to 
    AND Id = @id 
0

如果我理解你的權利:

數據集:

ID:01 From:01/10/2014 13:00 To:02/10/2014 13:00 
ID:02 From:01/10/2014 14:00 To:02/10/2014 14:00 
ID:03 From:01/10/2014 15:00 To:02/10/2014 15:00 
ID:04 From:01/10/2014 16:00 To:02/10/2014 16:00 
ID:05 From:01/10/2014 17:00 To:02/10/2014 17:00 
ID:06 From:01/10/2014 18:00 To:02/10/2014 18:00 

用戶要求:來自:2014年1月10日14:01。

像其他人所說,這將是錯誤的

select top 1 * from tbl, where from <= @From 

對於@From = 14:01,這將返回ID:02.

進一步說:能夠請求用戶到/結束時間?如果是這樣,那將如何工作?

如果這不合適,也許你可以根據上面的數據集評論用戶將要搜索的內容,以及你期望得到的結果。

問候。

+0

我正在執行插值,數據來自數據庫,其中包含用戶開始時間點前一年的數據。 – Doro 2014-10-06 13:18:19