我从未使用过烧瓶,但假设您可以发出分页/页面抛出,那么引入值 0-9 的查询将允许有条件的页面抛出。
例如,假设 orders 表有 3 列,orderdate、ordertype、orderdesc,并且所需的顺序是根据这些列(参见注释)的列,然后以下将引入一个从 0 到 9 的列,从而允许检查 pafe throw:-
SELECT *,
(
SELECT count()
FROM ORDERS
WHERE orderdate||ordertype||orderdesc < o.orderdate||o.ordertype||o.orderdesc
ORDER BY orderdate||ordertype||orderdesc
) % 10 AS orderby
FROM ORDERS AS o ORDER BY orderdate||ordertype||orderdesc
- 请注意,以上依赖于排序顺序和具有相同结果的 where 子句,可能需要更复杂的 WHERE 子句。以上只是一个原则上的例子。
示例用法
考虑以下使用上述示例的示例。这会生成 100 行订单,其中包含在特定范围内随机生成的订单日期和订单类型,然后根据上述查询提取数据。 underyling数据和提取数据的结果显示在结果部分。
/* Create Test Environment */
DROP TABLE IF EXISTS orders;
/* Generate and load some random orders */
CREATE TABLE If NOT EXISTS orders (orderdate TEXT, ordertype TEXT, orderdesc TEXT);
WITH RECURSIVE cte1(od,ot,counter) AS
(
SELECT
datetime('now','+'||(abs(random()) % 10)||' days'),
(abs(random()) % 26),
1
UNION ALL SELECT
datetime('now','+'||(abs(random()) % 10)||' days'),
(abs(random()) % 26),
counter+1
FROM cte1 LIMIT 100
)
INSERT INTO orders SELECT * FROM cte1;
/* Display the resultant data */
SELECT rowid,* FROM orders;
/* Display data with generated page throw indicator */
SELECT rowid,*,
(
SELECT count()
FROM ORDERS
WHERE orderdate||ordertype||orderdesc < o.orderdate||o.ordertype||o.orderdesc
ORDER BY orderdate||ordertype||orderdesc
) % 10 AS orderby
FROM ORDERS AS o ORDER BY orderdate||ordertype||orderdesc;
/* Clean up */
DROP TABLE IF EXISTS orders;
结果(部分)
核心数据(未按 rowid 排序(包含 rowid 用于比较目的)):-
提取的带有页面抛出指示符的数据(突出显示)
- 显然,您可能不会为第一行添加页面。
- 为方便起见,使用了 3 列的串联,结果可能有点混乱,例如2 似乎大于 11,依此类推。
- rowid表示原来的位置,说明数据已经排序。