2017-01-14 3 views
0

Iきた瞬間に次のコード:滑らかに和に達するまで行を選択する方法は?

var test: Rep[Long] = 4234 
Model.sellOrder 
    .filter(_.price <= price) 
    .sortBy(_.price.asc) 
    .filter(order => {test -= order.amount; test < 0}) 

他の人はそれができませんコメントで指摘したように、私は額の合計が4234.

+0

どのようにプレーンSQLでそれを行うと思いますか。滑らかなクエリは、SQLにマップされます、あなたはそのようなことを行うことはできません。 –

+0

sqlの場合、これは実行中の合計で達成できます。 – Vennik

+0

この種の照会は、通常、ウィンドウ関数を使用して行われます。私はあなたがスリックだけで(少なくとも独自の機能を定義することなく)それらを行うことはできないと思います。それはあなたが使用しているRDBMSを知るのに役立ちます。 PostgreSQLを使用している場合は、[slick-pg](https://github.com/tminglei/slick-pg)と 'SUM(金額)オーバー(注文価格)'をあなたが望むものを得るために 'WHERE sum Marth

答えて

0

に到達するまでの行を選択したいです累積合計をサポートする必要があるため、データベース全体に実装してください。しかし、これは、質問に採用されているのと同じ命令的アプローチを使用して、データベース上でコレクションを使用して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}) 
    } 
関連する問題