【发布时间】:2015-05-03 05:46:05
【问题描述】:
我希望在 SQL 中按日期生成一个简单的累积总计,但遇到了一个看似简单的问题。我已经开发了一种解决方法,但想象一下有一种方法可以在没有额外步骤的情况下做我想做的事。基本上我正在寻找的是:
| Date | Count |
| 2015-01-01 | 1 |
| 2015-01-02 | 5 |
| 2015-01-03 | 8 |
| 2015-01-04 | 9 |
| 2015-01-05 | 9 |
我们可以假设表格只有两行——id 和date——而我想看到的正是上面的内容;但是,当我运行以下代码时,我得到重复的行:
SELECT date, count(*) over (order by date) AS cumulative_count FROM my_table;
返回:
| Date | Count |
| 2015-01-01 | 1 |
| 2015-01-02 | 5 |
| 2015-01-02 | 5 |
| 2015-01-02 | 5 |
| 2015-01-02 | 5 |
| 2015-01-02 | 5 |
| 2015-01-03 | 8 |
| 2015-01-03 | 8 |
...etc.
我的解决方法是使用SELECT DISTINCT date, count(*) over (order by date) AS cumulative_count FROM my_table;,但我想我只是想念一种更好的方法。
提前致谢!
【问题讨论】:
-
我不认为在这里成为
DISTINCT有什么问题。另见:stackoverflow.com/questions/5698452/… -
在这种情况下为什么要使用窗口函数?
-
有没有更简单的方法来获得累积/运行总计而不使用窗口函数?
标签: sql postgresql window-functions