我不太确定如何问这个,所以我将从一个例子开始。假设我的数据库中有一个表,如下所示:
id | time | event | pnumber
---------------------------
1 | 1200 | foo | 23
2 | 1130 | bar | 52
3 | 1045 | bat | 13
...
n | 0 | baz | 7
现在说我想在一段时间后得到最后一个已知的pnumber。例如,在时间= 1135,它必须返回并找到表中的最后已知时间(1130)然后返回该pnumber。因此,对于t = 1130,它将返回pnumber = 52.但是一旦t = 1045,它将返回pnumber = 13.(在此上下文中,时间从1200减少到0)。
这是我到目前为止所拥有的。
SELECT pnumber FROM table WHERE time = (SELECT time FROM table WHERE time <= '1135' ORDER BY time LIMIT 1)
有更简单的方法吗?不使用多个语句。我正在使用sqlite3
答案 0 :(得分:2)
不确定。您可以通过执行以下操作来压缩该查询:
SELECT pnumber FROM table WHERE time >= 1135 ORDER BY time DESC LIMIT 1;
无需先嵌入选择以获取特定时间,这应该可以。
编辑:让不平等符号混合在一起 - 如果你在特定时间之后寻找第一条记录,你需要time >= 1135
并按时间顺序下降,限制为1。
答案 1 :(得分:1)
为什么需要第二个查询?你能做这样的事吗:
SELECT TOP 1 pnumber FROM table WHERE time >= '1135' ORDER BY TIME DESC
答案 2 :(得分:1)
我有点困惑。您要求1135将返回1130的值,但您使用的是大于或等于而不是小于。如果你的例子是你想要的,试试这个。
SELECT PNUMBER FROM TABLE WHERE TIME<=1135 ORDER BY TIME DESC LIMIT 1