将来の日付で合計クレジットでノックしない負の数を見つける方法があります。fifo in SQLクエリ
0
A
答えて
0
をgur.com/pcwhp.png
sample私はあなたがExcelの溶液またはSQL 1を探しているなら、それはユニークなキーなしでSQLで作業するのは難しい原因を確認していません。すべてのトランザクションに固有のIDフィールドがあると仮定して、どのように進めるかを提案しようとします。
まずアカウントのすべての正の変更を計算します(これは解の一部になりますが、分かりやすくするために分割しています)。
SELECT
t.account,
SUM(t.debit) AS change_positive
FROM
transactions AS t
WHERE
t.debit > 0
GROUP BY
t.account
ここでは、払い戻し額の合計額を勘定別に記載します。この場合、(10 + 5 +20)
同様の操作を負債変更(負の変更)する必要がありますが、現行の操作(例: 2014年12月21日は-20、2014年12月25日は-55です。 debits_till_dateの価値がある場合は、payments_totalがその支払いをカバーしているかどうか、またはすでに支払いの対象となる債務が多すぎるかどうかを知ることができます。 (以前のものを含む)の合計クエリとしてSQLでは、それは次のようになります。あなたは最後の部分を削除した場合
SELECT
q.account,
q.date,
q.transaction_debit,
q.remainings_from_payments
FROM
(
SELECT
t.account,
t.date,
t.debit AS transaction_debit,
SUM(t2.debit) AS debits_till_date,
i.payments_total,
SUM(t2.debit) + i.payments_total AS remainings_from_payments
FROM
transactions AS t
LEFT JOIN transactions AS t2 ON t.account = t2.account AND t.date >= t2.date AND t2.debit < 0
LEFT JOIN (SELECT t.account, SUM(t.debit) AS payments_total FROM transactions AS t WHERE t.debit > 0 GROUP BY t.account) AS i ON t.account = i.account
GROUP BY
t.account, t.date
) AS q
WHERE
q.transaction_debit < 0
AND q.remainings_from_payments < 0
「AND q.remainings_from_payments < 0」あなたがした後、すべての残ってどのくらいの支払いの見ることができるようになります否定的な取引。
関連する問題
- 1. SQLサーバーでのFIFOクエリ
- 2. Unix FIFO in go?
- 3. SQL Select-INクエリ
- 4. SQLクエリのDiffrences In Exifs
- 5. "WHERE IN"句のsqlクエリ
- 6. SQLサーバーでINクエリを置換
- 7. SQL NOT IN MS ACCESS/VBAのクエリ
- 8. SQL IN演算子ネストされたクエリ
- 9. SQL:NOT IN INクエリ
- 10. NOT INクエリの結果を削除するSQLクエリ
- 11. IN節を使用したSQLクエリのMYSQLクエリの最適化
- 12. "IN" クエリ
- 13. sql、function in sql
- 14. Linqクエリで 'IN'& 'NOT IN'
- 15. %in sql
- 16. FIFOサーバプログラム
- 17. ノンブロッキングFIFO
- 18. tSQL NOT INクエリ
- 19. クエリNOT INアシスタント
- 20. DynamoDB INクエリ
- 21. 4 FIFOとシリアライゼーション
- 22. Python文字列FIFO
- 23. SQLのクエリでNOT INとNOT EQUALSの違いが異なる
- 24. dbGetQuery内のsql in()クエリの文字列を準備する
- 25. ユーザー定義関数を使用したSQLクエリのMySQL IN句
- 26. in sql dbmsがクエリを実行する方法
- 27. SQL "IN"条件のようなSolrクエリ構文
- 28. 他のテーブルにある値を返すSQL WHERE NOT INクエリ
- 29. INをwhere文節で使用するSQLクエリ
- 30. ** IN **クエリで冗長条件を削除する方法Sql
こんにちはStromoPL、クエリに感謝。それがworks.actually私はリンクhttp://www.sqlservercentral.com/articles/FIFO+Queues/145613/と同じソリューションを探してみてみましょう私はSQLのDB2を持っていると確信してどのように照らして質問を使用するリンク。私はトランザクションのための一意のIDを持っていません。唯一の識別子は、日付のクレジットとデビットの合計です。 –
Chris、 "date"フィールドを使用して "id"を使用しないようにクエリを更新しました。アカウント内の日付が一意である限り有効です。私が提供したクエリはmySQL上でテストされましたが、これはかなり標準的なので、プレーンなSQLをサポートするすべてのデータベースで動作する必要があります(クエリから "テーブル"という名前のテーブルに名前を変更します) – StormoPL
http://sqlfiddle.com/#! 9/49759d/1 –