如何解决多个子查询条件或SQLite中的循环
是否可以在单个SQL语句中执行类似于“ foreach”的查询?我的具体实现是使用SQLite,因此建议使用兼容语法的建议。
示例:假设我们有一个类似于以下内容的表:
simulation_id | sprite_id | time | x | y
1 1 0.0 0.0 0.0
1 2 0.0 5.5 1.6
1 1 1.0 0.1 0.0
1 2 1.0 5.5 1.5
1 3 1.0 9.9 4.1
1 1 2.0 ...
1 2 2.0
1 3 2.0
2 1 0.0
2 1 1.0
2 1 2.0
2 2 2.0
2 1 3.0
2 2 3.0
2 3 3.0
...
从表中得出的主要结论是,并非所有“ sprite_id”条目都可以在t = 0.0时实例化。
我想在所有实例中检索所有精灵的位置sprite_id = 3出现在 中。因此,我的理想查询是针对simulation_id = 1在t = 1.0时检索精灵1、2和3的位置,对于simulation_id = 2在t = 3.0时检索精灵的位置。
我相信查询内容大致如下:
SELECT simulation_id,sprite_id,time,x,y
FROM locations WHERE time = (SELECT MIN(time) FROM locations WHERE sprite_id = 3)
...但是我需要为表中的每个Simulation_id运行此命令;甚至可以在单个SQL查询中做到这一点?
解决方法
您可以在WHERE
子句中使用相关子查询:
SELECT l.*
FROM locations l
WHERE l.sprite_id = 3
AND time = (
SELECT MIN(time)
FROM locations
WHERE simulation_id = l.simulation_id AND sprite_id = l.sprite_id
)
或使用ROW_NUMBER()
窗口功能:
SELECT simulation_id,sprite_id,time,x,y
FROM (
SELECT *,ROW_NUMBER() OVER (PARTITION BY simulation_id ORDER BY time) rn
FROM locations
WHERE sprite_id = 3
)
WHERE rn = 1
请参见demo。
结果:
> simulation_id | sprite_id | time | x | y
> ------------: | --------: | ---: | :--- | :---
> 1 | 3 | 1.0 | .... | ....
> 2 | 3 | 3.0 | .... | ....
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。