C#从数据库中检索与用户开始时间匹配的数据

本文关键字:时间 开始时 数据 开始 用户 数据库 检索 | 更新日期: 2023-09-27 18:25:44

我的任务是从数据库中检索数据,用户可以选择开始时间。例如,如果用户从13:00开始选择,而当时没有结果,则阅读应在一分钟前(12:59)开始,如果在两分钟前(12:00)仍然没有结果,直到找到结果。这就是我迄今为止一直在尝试但没有成功的东西:

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;

C#从数据库中检索与用户开始时间匹配的数据

要在某个时间或之前获取最新的条目,请使用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年10月1日14:01。

就像其他人所建议的那样,会有什么问题

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

对于@From=14:01,这将返回ID:02。

更进一步:用户是否能够请求开始/结束时间?如果是的话,这将如何运作?

如果这不合适,也许你可以根据上面的数据集评论用户会搜索什么,以及你期望的结果。

谨致问候。