我有一个看起来像这样的表:
+-----+-----------+------------+
| id | value | date |
+-----+-----------+------------+
| id1 | 1499 | 2012-05-10 |
| id1 | 1509 | 2012-05-11 |
| id1 | 1511 | 2012-05-12 |
| id1 | 1515 | 2012-05-13 |
| id1 | 1522 | 2012-05-14 |
| id1 | 1525 | 2012-05-15 |
| id2 | 2222 | 2012-05-10 |
| id2 | 2223 | 2012-05-11 |
| id2 | 2238 | 2012-05-13 |
| id2 | 2330 | 2012-05-14 |
| id2 | 2340 | 2012-05-15 |
| id3 | 1001 | 2012-05-10 |
| id3 | 1020 | 2012-05-11 |
| id3 | 1089 | 2012-05-12 |
| id3 | 1107 | 2012-05-13 |
| id3 | 1234 | 2012-05-14 |
| id3 | 1556 | 2012-05-15 |
| ... | ... | ... |
| ... | ... | ... |
| ... | ... | ... |
+-----+-----------+------------+
value
我想要做的是为每个日期生成此表中所有数据的列的总和。id
每天有一个条目。问题是某些 ids 没有所有天的值,例如id2 没有日期的值:2012-05-11
我想要做的是:当给定日期没有特定 id 的值时,则在总和中计算前一个日期的值(更接近给定日期)。
例如,假设我们只有上面显示的数据。我们可以从此查询中获取特定日期的所有值的总和:
SELECT SUM(value) FROM mytable WHERE date='2012-05-12';
结果将是:1511 + 1089 = 2600
但我想要的是做一个查询来做这个计算:1511 + 2223 + 1089 = 4823
以便添加日期 2012-05-11 的2223而id2
不是错过的值:
| id2 | 2223 | 2012-05-11 |
你知道如何通过 SQL 查询来做到这一点吗?或通过脚本?例如蟒蛇..
每个日期我有数千个 id,所以如果可能的话,我希望查询快一点。