首页 > 解决方案 > 循环中的 SELECT 查询

问题描述

我正在研究一个 sqlite3 外壳。

SELECT * FROM tasks WHERE name in ("TaskA", "TaskD") LIMIT 5;

上面的语句将只打印前 5 行。有没有办法编写此语句,以便打印“TaskA”和“TaskD”结果中的前 5 行?

本质上,我正在尝试编写类似于以下内容的循环:

FOR task in ("TaskA", "TaskD") SELECT * FROM tasks WHERE name = task LIMIT 5;

但我不知道正确的语法。

标签: sqlite

解决方案


使用ROW_NUMBER()窗口函数:

SELECT *
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY rowid) rn 
  FROM tasks 
  WHERE name IN ("TaskA", "TaskD")
)
WHERE rn <= 5

我使用列rowid来定义行的顺序。
如果您的表中有另一列(如日期列)可用于定义顺序,则可以替换rowid为该列。


推荐阅读