我有一个表,其中存储有关文件的基本信息:
CREATE TABLE filez (
id INTEGER NOT NULL,
name TEXT NOT NULL,
size BIGINT NOT NULL
);
CREATE UNIQUE INDEX filez__id__idx ON filez USING (id);
我需要 Select 一组组合大小不超过某个阈值的文件.下面是一个实现这一点的普通查询(它可以使用非materialized CTE语法,但这在本例中并不重要):
SELECT id, name
FROM (
SELECT id, name,
SUM(size) OVER w AS total_size -- accumulating size of files
FROM filez
WINDOW w AS (ORDER BY id ASC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
ORDER BY id ASC
) AS t
WHERE total_size <= THRESHOLD
我在这个查询中遇到了一个Personal😄问题:无论是否达到阈值,它都会判断所有记录.我希望查询只遍历足够数量的记录(按索引的"id"字段排序),并在阈值条件变为False时立即停止执行.
编辑.
也许停止查询的问题可以推广.如果有一个函数,让我们将其命名为stop_query(BOOL):BOOL
,它可以根据任意条件提前结束查询执行,如下例所示:
SELECT f1, f2
FROM tab1
WHERE stop_query(<some condition>)
或者
SELECT f1, f2
FROM tab1
WHERE CASE WHEN <some condition> THEN stop_query() ELSE TRUE END