SQL两个日期之间的时间段,查询每一天的平均值

时间:2012-11-14 18:56:03

标签: sql date average period

我保存了以下几个条目:

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

这可能吗?我无法想象从一段时间到一天的价值观如何。提前谢谢!

2 个答案:

答案 0 :(得分:1)

当您需要查询结果时,所有日期都需要有日期表(little help)。我给你答案而不使用日期表。

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 |

不使用日期表的相同结果:

<强> SQLFIddle example just with SQL (without Date table)

答案 1 :(得分:0)

您可以考虑使用整数表来创建日期范围。请参阅我的回答here,了解我在说什么。

在您的情况下,您将确定每个日期范围内的天数,并将其用于最大整数。该最大整数既可以将行数限制为适当的天数,也可以计算日期范围内每天的平均值。