使用SQL获取n之前的最后一项

时间:2013-07-18 20:04:00

标签: sql sqlite

我不太确定如何问这个,所以我将从一个例子开始。假设我的数据库中有一个表,如下所示:

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

3 个答案:

答案 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