sql - 如何聚合SQL中的一列一周?

标签 sql group-by aggregate

我有一个这样的表:

| date | value |
| -------- | -------------- |
| 1/1    | 1            |
| 1/1   | 2            |
| 1/2   | 2            |
| 1/3   | 2            |
| 1/3   | 3            |
| 1/4   | 5           |
| 1/4   | 2            |
| 1/5   | 2            |
| 1/5   | 3            |
| 1/5   | 4            |
| 1/6   | 2            |
| 1/7   | 4            |
| 1/7   | 5            |
| 1/7   | 2            |
| 1/7   | 1            |
| 1/7   | 3            |
| 1/8   | 4            |
| 1/9   | 2            |

我想编写一个查询来对过去一周的每一天的值求和。我想要的输出是:

 | date | value |
| -------- | -------------- |
| 1/1    | 2+1            |
| 1/2   | 2+2+1            |
| 1/3   | 3+2+2+2+1            |
| 1/4   | 2+5+3+2+2+2+1           |
| 1/5   | 4+3+2+2+5+3+2+2+2+1             |
| 1/6   | 2+4+3+2+2+5+3+2+2+2+1            |
| 1/7   | 3+1+2+5+4+2+4+3+2+2+5+3+2+2+2+1           |
| 1/8   | 4+3+1+2+5+4+2+4+3+2+2+5+3+2+2            |
| 1/9   | 2+4+3+1+2+5+4+2+4+3+2+2+5+3+2            |

我想每周汇总。如果我做单组,我只会得到每一天的总和,而不是过去一周的总和。

SELECT date,SUM(value) AS total FROM table GROUP BY date

最佳答案

你可以使用 OVER 子句

SELECT tot.inputDate, SUM(tot.inputVal)OVER(partition by '' ORDER BY inputDate ROWS BETWEEN 6 preceding and current row)  sum_7_days
FROM 
(SELECT inputDate, SUM(inputVal) as inputVal
FROM test
GROUP BY inputDate) as tot

前面和当前行的单词将获得当前行之前的行数。

请检查这个db fiddle

关于sql - 如何聚合SQL中的一列一周?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73522681/

相关文章:

python - 如何组合多个 django 查询集聚合和过滤器

r - 以每个值仅列出一次的方式聚合数据表的多列中的重复项

iPhone聚合iTunes报告工具

SQL Server 查询试运行

mysql - 计算两个子查询mysql之间的百分比

mysql - 我无法插入数据库

c# - 从 DateTime 对象集合中解析每月的项目

python - Pandas duration groupby - 以定义的值开始组范围

mysql - 如何在 DB2 中与其他 sql 一起运行脚本

solr - 如何在 Solr 中对组求和?