Sql 找到最后一个可以装入容器且重量不超过1000磅的人
我有一张桌子上的一排人,他们以不同的重量测量,轮流进入电梯。 我正在尝试解决如何选择一个记录的名称值,其中总和精确到1000磅。 该表如下所示: 我已经能够拼凑出以下Sqlite代码:Sql 找到最后一个可以装入容器且重量不超过1000磅的人,sql,sqlite,over-clause,Sql,Sqlite,Over Clause,我有一张桌子上的一排人,他们以不同的重量测量,轮流进入电梯。 我正在尝试解决如何选择一个记录的名称值,其中总和精确到1000磅。 该表如下所示: 我已经能够拼凑出以下Sqlite代码: select name from (select *, sum(weight) over (order by turn) as running_weight from line) where running_weight >= 1000 and running_weight - weight &l
select name from (select *, sum(weight) over (order by turn) as running_weight from line)
where running_weight >= 1000 and running_weight - weight < 1000
它在我的Sqlite浏览器工具上运行得很好,但是在web工具上它没有注册Over子句,我得到以下错误
Compilation successful.
Example test: (example test)
Output (stderr):
error on query: select name
from (select *,
sum(weight) over (order by turn) as running_weight
from turns
)
where running_weight >= 1000 and running_weight - weight < 1000, details: near "(": syntax error
RUNTIME ERROR (tested program terminated with exit code 1)
有谁能给我一些建议,让我选择Thomas Jefferson吗?较旧版本的SQLite可能不支持窗口功能。如果是这种情况,则可以使用相关子查询:
select name
from (select l.*,
(select sum(l2.weight)
from line l2
where l2.turn <= l.turn
) as running_weight
from line l
) l
where running_weight >= 1000 and running_weight - weight < 1000
找到最后一个可以装入容器的人
超过1000磅的重量限制
表示您希望权重的总和小于或等于1000,因此您的条件:
where running_weight >= 1000 and ...
这是错误的
如果不能使用窗口函数,可以通过自连接和聚合来实现:
select t1.name
from line t1 inner join line t2
on t2.turn <= t1.turn
group by t1.id, t1.name
having sum(t2.weight) <= 1000
order by sum(t2.weight) desc limit 1
您的状况:跑步重量>=1000。。这是错误的。碰巧您的查询返回了正确的结果,因为总和正好是1000。