我的任务是从数据库中检索数据,用户可以选择开始时间。例如,如果用户从13:00选择并且当时没有结果,则读数应该在(12:59)之前一分钟开始,如果在2分钟之前(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;
答案 0 :(得分:0)
要在一次或之前获取最新的条目,请使用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
答案 1 :(得分: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年10月1日14:01。
与其他人的建议一样,
会出现什么问题select top 1 * from tbl, where from <= @From
对于@From = 14:01,这将返回ID:02。
更进一步:用户是否能够请求到/结束时间?如果是这样,那将如何运作?
如果这不合适,也许您可以根据上面的数据集以及您期望的结果来评论用户搜索的内容。
问候。