2017-05-17 4 views
2

を超過するまで、私はiddateamountを持つテーブルを持っているが、私は合計で大きいか等しくなるようにすることを、日付DESC順、id年代のリストを取得する必要がありますいくつかの特定の値よりも。PostgreSQLの選択行一定量に達すると

  1. 例えば

    id | date | amount 
    ----|----------|-------- 
    1 | 1/1/2017 | 3 
    2 | 2/1/2017 | 5 
    3 | 3/1/2017 | 4 
    4 | 4/1/2017 | 2 
    5 | 5/1/2017 | 7 
    6 | 6/1/2017 | 4 
    

    私は合計で日付DESC BY> = 12、ORDERになりますすべての行を取得する必要があります。次に、3行になります:6、5、4、as 4 + 7 + 2 = 13

  2. 合計が5より大きく、ORDER BY日付DESCであるすべての行を取得する必要があります。それから、2行になります:6、5 = 4 + 7 = 11となります。
  3. 合計で15以上、ORDER BY日付DESCのすべての行を取得する必要があります。そして、4行になるだろう:6、5、4、3 + 7 + 2 + 4 = 17

非常によく似た質問と解決策Postgresql select until certain total amount is reachedがあり4のように、私は少し異なる必要があります。

ありがとうございました。

+0

? –

+0

@vkpリンクされた質問は、与えられた値より**少ない**すべての行を取ります、私は与えられた値を超えるために、より多くの行が必要です。 – alex23

答えて

2

ただ、累積合計を使用します。それがリンクされ、質問と異なっているか

select t.* 
from (select t.*, sum(amount) over (order by date desc) as running_amount 
     from t 
    ) t 
where running_amount - amount < 12 
order by date desc; 
+1

は 'running_amount - amount <12'である必要があります。これは、実行量がn行の合計と正確に等しいときに余分な行を含まないようにするためです。 –

+0

@vkpはい、そうですが、 '<'結果に余分な行はありません。お手数をおかけしていただきありがとうございます。 – alex23

関連する問題