sqlite - 循环中的 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;
但我不知道正确的语法。
解决方案
使用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
为该列。
推荐阅读
- windows - 如果我使用 CreateWindow*() 而不是 CreateDialog*() 函数系列,我会有什么“缺点”?
- reactjs - 我想用 React 在 div 元素中添加参数
- react-native - React: Uncaught SyntaxError: Unexpected token < in JSON at position 0
- sass - Bootstrap 5 - 使用 row-cols() mixin 时丢失列类功能
- python - 如何在列表索引中计数()
- javascript - 满足条件时停止更新(React tic-tac-toe)
- c# - Razor 类库 (RCL) _ViewImports 在站点运行时被忽略
- ios - 以编程方式动态调整 uilabel 宽度的约束
- python - 向条形图子图添加统计显着性注释
- python-3.x - 如何在 collections.defaultdict 中找到最小值和最大值