【发布时间】:2021-09-06 05:38:10
【问题描述】:
我有一个由 id 和客户标识的订单列表。我需要知道从该客户放置的索引 n 的顺序开始的索引 n-9 的订单的 id。
例如:
SELECT OrderID
FROM Orders
WHERE CustomerID = "1808317576" AND OrderID < 29
ORDER BY OrderID DESC LIMIT 9
上面的查询返回这些记录:
| OrderID |
|---|
| 28 |
| 26 |
| 23 |
| 20 |
| 19 |
| 18 |
| 17 |
| 16 |
| 13 |
为了解决我的问题,我尝试这样做:
SELECT OrderID
FROM Orders
WHERE CustomerID = "1808317576" AND OrderID < 29
ORDER BY OrderID DESC LIMIT 1
我需要:
| OrderID |
|---|
| 13 |
但它会返回这个:
| OrderID |
|---|
| 28 |
然后我尝试从ORDER BY 中删除DESC:
SELECT OrderID
FROM Orders
WHERE CustomerID = "1808317576" AND OrderID < 29
ORDER BY OrderID LIMIT 1
但它会返回这个:
| OrderID |
|---|
| 1 |
我怎样才能得到 13?!
【问题讨论】:
-
SQLite 支持窗口函数。这可能是一个不错的起点:sqlite.org/windowfunctions.html
-
@crcvd 对于这样一个简单的要求,不需要窗口函数。事实上,在这里使用 ROW_NUMBER 性能会差很多。
标签: sqlite sql-order-by sql-limit