1

MySQL の SELECT コマンドに問題があります。私は、1 日から 1000 日 (> 100 万行) の満期で毎日交換される証券のデータベースを持っています。1 日あたり (および場合によってはカテゴリごと) の未払い額を取得したいと考えています。例を挙げると、これが私の最初のデータセットであるとします。

DATE    VALUE    MATURITY
1       10       3       
1       15       2
2       10       1
3       5        1

次の出力を取得したい

DATE    OUTSTANDING_AMOUNT
1       25
2       35
3       15

未払い額は、まだ「生きている」交換証券の合計として計算されます。つまり、2 日目には 10 の新しい取引所と 2 つの古い取引所 (10 と 15) の満期が 1 日よりも長いため未払いがあり、2 日目の合計未払い額は 35 です。 5 の新しい交換と 10 の 1 日目からの古い交換。つまり、未払い額の 15 です。

より視覚的な説明は次のとおりです。

Monday      Tuesday     Wednesday
10          10          10             (Day 1, Value 10, matures in 3 days)
15          15                         (Day 1, 15, 2 days)
            10                         (Day 2, 10, 1 day)
                        5              (Day 3, 5, 3 days with remainder not shown)
-------------------------------------
25          35          15             (Outstanding amount on each day)

この結果を得る簡単な方法はありますか?

4

4 に答える 4

0

集計(数字)テーブルを使用した可能な解決策

SELECT date, SUM(value) outstanding_amount
  FROM
(
  SELECT date + maturity - n.n date, value, maturity
    FROM table1 t JOIN
  (
    SELECT 1 n UNION ALL
    SELECT 2 UNION ALL 
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 
  ) n ON n.n <= maturity
) q
 GROUP BY date

出力:

| | 日付 | OUTSTANDING_AMOUNT |
------------------------------
| | 1 | 25 |
| | 2 | 35 |
| | 3 | 15 |

これがSQLFiddleのデモです

于 2013-08-14T14:15:17.160 に答える
0

Each date considers each row for inclusion in the summation of value

SELECT d.DATE, SUM(m.VALUE) AS OUTSTANDING_AMOUNT
FROM yourTable AS d JOIN yourtable AS m ON d.DATE >= m.MATURITY
GROUP BY d.DATE
ORDER BY d.DATE
于 2013-08-14T13:59:05.753 に答える