簡體   English   中英

C#從與用戶啟動時間匹配的數據庫中檢索數據

[英]C# retrieve data from database matching user start time

我的任務是從數據庫中檢索數據,用戶可以選擇開始時間。 例如,如果用戶從13:00開始選擇,並且那時沒有結果,則讀數應在(12:59)的前一分鍾開始;如果在(12:58)的前兩分鍾仍然沒有讀數,則直到找到結果為止。 到目前為止,這是我一直在嘗試的成功嘗試:

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;

要一次或之前獲取最新條目,請使用ORDER BY和LIMIT,或簡單地使用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

如果我正確理解你:

資料集:

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。

更進一步:用戶是否可以請求到達/結束時間? 如果是這樣,那將如何工作?

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

問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM