Scala 如何选择行,直到您使用slick达到一个总和?

Scala 如何选择行,直到您使用slick达到一个总和?,scala,slick,Scala,Slick,目前我有以下代码: var test: Rep[Long] = 4234 Model.sellOrder .filter(_.price <= price) .sortBy(_.price.asc) .filter(order => {test -= order.amount; test < 0}) var测试:Rep[Long]=4234 销售订单模型 .filter(u.price{test-=order.amount;test{test-=x;x->test

目前我有以下代码:

var test: Rep[Long] = 4234
Model.sellOrder
  .filter(_.price <= price)
  .sortBy(_.price.asc)
  .filter(order => {test -= order.amount; test < 0})
var测试:Rep[Long]=4234
销售订单模型
.filter(u.price{test-=order.amount;test<0})

我希望选择行,直到总数达到4234。

正如其他人在评论中指出的那样,不可能完全在数据库上实现,因为它需要支持累积总和。但这可以通过在JVM上使用集合实现最终过滤器,而不是在数据库上使用与本文中采用的相同的命令式方法来部分实现

var test = 4234
db.run(Model.sellOrder
  .filter(_.price <= price)
  .sortBy(_.price.asc)
  .result) map {
    case rows => 
           rows.map(x => { test -= x; x -> test })
          .takeWhile({ case (_,x) => x > 0})
          .map({case (x,_) => x})
   }
var测试=4234
db.run(Model.sellOrder
.filter(u.price
map(x=>{test-=x;x->test})
.takeWhile({case(x,x)=>x>0})
.map({case(x,)=>x})
}

想一想在普通sql中该怎么做。Slick查询将映射到sql,你不能只做这样的事情。我想,使用sql,这可以通过运行总计来实现。这种查询通常使用窗口函数来完成。我不认为只使用Slick(至少不定义自己的函数)就可以完成。这将有助于了解您使用的RDBMS。如果您使用的是PostgreSQL,那么您应该能够使用和一个
SUM(amount)OVER(ORDER BY price)
结合一个
WHERE SUM
来获得您想要的。我正在使用PostgreSQL,我将尝试一下。