Sql 找到最后一个可以装入容器且重量不超过1000磅的人

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

我有一张桌子上的一排人,他们以不同的重量测量,轮流进入电梯。 我正在尝试解决如何选择一个记录的名称值,其中总和精确到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 < 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。