我正在尝试做一些数据报告,并且不要经常做 SQL 体操来知道我在寻找什么功能。我将其称为“取消分组依据”。我有一个 SELECT 输出这个,反映了一系列每月订阅项目:它们何时创建、关闭以及每月支出是多少:
+----+---------------------------------+------------+------------+------------+
| id | description | created_on | closed_on | monthly |
+----+---------------------------------+------------+------------+------------+
| 3 | Daily horoscope email | 2012-01-01 | null | 10000.0000 |
| 5 | Pet food delivery | 2012-01-05 | null | 3500.0000 |
| 6 | Dirty magazine subscription | 2012-01-09 | null | 1500.0000 |
| 7 | Stupid nuts posted in a box | 2012-01-01 | 2012-01-04 | 1500.0000 |
.... etc ...
我正在尝试做的是每天计算“运行率”。因此,每天都会列出当前每月承诺的总计,即上述数据将映射到:
+------------+----------+
| date | run_rate |
+------------+----------+
| 2012-01-01 | 11500 |
| 2012-01-02 | 11500 |
| 2012-01-03 | 11500 |
| 2012-01-04 | 10000 |
| 2012-01-05 | 13500 |
| 2012-01-06 | 13500 |
| 2012-01-07 | 13500 |
| 2012-01-08 | 13500 |
| 2012-01-09 | 15000 |
我认为可能的是创建一个每天有一行的临时表,然后编写一个引用第一个表的 LEFT JOIN / GROUP BY 语句来构建我的输出。但是我只能看到如何以这种方式创建每天的“差异”,而不是运行总计,并且我需要将第一个表“取消组合”为两个条目,这是创建订阅时的正条目,以及关闭时的否定条目。
我想坚持 MySQL,如果可能的话,在一个大型声明中。如果这不可能,我可以将一些存储过程或临时表添加到我的查询框架中。或者我真的必须通过 Ruby 来研究我的数据吗?(我确切地知道怎么做,但希望我能把所有的逻辑都放在一个地方,我正在努力改进我们目前使用 ActiveRecord 的缓慢计算)。