11

次の問題について何か助けが得られるかどうか疑問に思っていました。

トランザクションのテーブル (以下に簡略化) があり、合計金額が特定の金額に達するまでトランザクションのみを選択したいと考えています。

Transactionsテーブル

 id |   date   | amount 
----|----------|--------
 1  | 1/1/2012 |   2 
 2  | 2/1/2012 |   3 
 3  | 3/1/2012 |   4
 4  | 4/1/2012 |   20 
 5  | 5/1/2012 |   1 
 6  | 6/1/2012 |   2

ここで、合計金額が 6、つまり最初の 2 行だけになるまでテーブルで選択を行いたいとします。これを行うにはどうすればよいでしょうか?

私はおそらくそれ自体といくつかの合計を結合することを考えていましたが、実際にはどこにも行きませんでした。可能であれば、関数を使用しないことをお勧めします。

また、最低額に似たもの。

どんな助けでも大歓迎です:)

T

4

3 に答える 3

20
select id, 
       date, 
       amount, 
       running_total
from (
    select id,
           date,
           amount,
           sum(amount) over (order by date asc) as running_total
    from transactions
) t
where running_total <= 6
于 2012-05-11T10:54:42.460 に答える
1

それは最も効率的な方法ではないかもしれませんが(あなたがまだ、本質的に、最初にすべてを選択しているので)、私は現在の合計を使用することを検討します。

何かのようなもの:

SELECT
  *
FROM
  (
  SELECT
    id
    , date
    , amount
    , (SELECT SUM(amount) FROM Transactions WHERE id <= t.id) AS RunningTotal
  FROM
    Transactions t
) t1
WHERE
  t1.RunningTotal < 6
于 2012-05-11T10:57:21.740 に答える
1
select T1.*
from Transactions as T1
where 6 - (select sum(T2.amount) 
               from Transactions as T2 where  T2.id <= T1.id
          ) >= 0
order by id asc

Postgres が SQL Server のようにサブクエリをサポートしている場合、このクエリは SQL Server で機能します。

于 2012-05-11T10:46:14.857 に答える