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

这可能吗?我无法想象如何从期间得出单日值。提前致谢!

4

2 回答 2

1

当您需要所有日期的查询结果时,需要有 Dates 表(帮助不大)。我给你答案并且不使用日期表。

SQLFIDDLEExample 1 with Date Table

询问:

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 回答