3

この SQL クエリを作成する方法についてしばらく考えていましたが、数時間考えた後、SO コミュニティに何かアイデアがあるかどうか尋ねてみようと思いました。

以下は、テーブルの関連部分のモックアップです。

契約

  • ID
  • 日にち
  • ar (はい/いいえ)
  • 学期

支払い

  • contract_id
  • 支払期日

クエリの目的は、月ごとに、予想される支払いの数と受け取った支払いの数を判断することです。

支払いを期待するための条件が「はい」の場合contracts.term、期待される支払いは の月後contracts.dateに 始まります。支払いは、最初の未払いの翌月まで引き続き期待されます。contracts.ar

これにはもう 1 つの複雑な問題があります。支払いが遅れる可能性がありますが、予定どおりに支払われたかのように表示される必要があります。

データはすべてそこにありますが、SQL クエリに頭を悩ませていました。私は SQL の第一人者ではありません。単純なクエリを処理した経験がかなりあるだけです。可能であれば、コードで結果をフィルタリングすることは避けたいのですが、あなたの助けがなければ、それは私がしなければならないことかもしれません.

期待される出力

Month    Expected Payments    Received Payments
January  500                    450
February 498                    478
March    234                    211
April    987                    789
...

SQL フィドル

SQL Fiddle を作成しました: http://sqlfiddle.com/#!2/a2c3f/2

4

1 に答える 1

1

クエリを記述せずに、一般的な考え方を説明します。契約テーブルで、月単位でキャストdate + termし、結果セットを月ごとにグループ化します。ここで、ar='YES'です。これはあなたに期待される支払いを与えます。

2番目のテーブルでは、payment_dateを月単位でキャストし、受け取った支払いの数を月ごとにグループ化します。

次に、月にこれら2つのサブ結果を結合して、1つの結果セットで両方の情報を取得できます。

于 2012-10-19T19:18:44.640 に答える