0

次のようにいくつかのエントリを保存しました。

ID | StartDate | Enddate | Amount

私は今、この期間の毎日をクエリして、それらの日付の間の合計金額を分割したいと思います。

例えば

1 | 2012-01-01 | 2012-01-05 | 10
2 | 2012-01-04 | 2012-01-05 | 20

になる必要があります

2012-01-01 |  2
2012-01-02 |  2
2012-01-03 |  2
2012-01-04 | 12
2012-01-05 | 12

これは可能ですか?期間から1日の値までの結論を想像することはできません。前もって感謝します!

4

2 に答える 2

1

すべての日付を含むクエリ結果が必要な場合は、Datesテーブルを作成する必要があります(ほとんど役に立ちません)。日付表を使用せずに回答します。

SQLFIDDLE例1と日付テーブル

クエリ:

SELECT 
DATE_FORMAT(td.TimeKey, '%Y-%m-%d')  as Date,
SUM(Amount/(SELECT COUNT(tdc.TimeKey) 
       FROM Table1 t1c, TDate tdc
       WHERE t1c.StartDate<= tdc.TimeKey
          AND t1c.Enddate >= tdc.TimeKey
          AND t1c.ID = t1.ID )) as Total_Amount
FROM Table1 t1, TDate td
WHERE t1.StartDate<= td.TimeKey
  AND t1.Enddate >= td.TimeKey
GROUP BY Date
ORDER BY Date

結果:

|       DATE | TOTAL_AMOUNT |
-----------------------------
| 2012-01-01 |            2 |
| 2012-01-02 |            2 |
| 2012-01-03 |            2 |
| 2012-01-04 |           12 |
| 2012-01-05 |           12 |

そして、日付テーブルを使用せずに同じ結果:

SQLのみを使用したSQLFIddleの例(日付テーブルなし)

于 2012-11-14T23:25:48.273 に答える
0

整数テーブルを使用して日付範囲を作成することを検討してください。私が話していることのアイデアについては、ここで私の答えを参照してください。

あなたの場合、各日付範囲の日数を決定し、それを最大整数に使用します。その最大整数は、行数を適切な日数に制限することと、日付範囲内の各日の平均を計算することの両方になります。

于 2012-11-14T19:18:30.080 に答える