如何使用 sql 和按日期分组显示指标在日期上的累积增长?
Posted
技术标签:
【中文标题】如何使用 sql 和按日期分组显示指标在日期上的累积增长?【英文标题】:How to show cumulative growth in a metric over dates using sql and grouping by date? 【发布时间】:2016-10-11 19:31:33 【问题描述】:我想显示一个指标在某个日期内的累积增长,同时还对日期进行分组,以便该日期在表格中只出现一次
我有以下数据集:
数据 = ['date':'2016-01-01','value':'1','date':'2016-01-01','value':'3','date': '2016-01-02','value':'3','date':'2016-01-02','value':'2']
以下查询生成下表:
select
date,
sum(value) over (order by date rows unbounded preceding) as value
from data
group by
date,
value
下面是我的桌子
date value
2016-01-01 1
2016-01-01 4
2016-01-02 7
2016-01-02 9
但是,我想生成下表:
date value
2016-01-01 4
2016-01-02 9
当我尝试以下查询并且不按值分组时,我收到以下错误:
select
date,
sum(value) over (order by date rows unbounded preceding) as value
from data
group by
date
错误:
列“值”必须出现在 GROUP BY 子句中或用于 聚合函数
【问题讨论】:
mysql 还是 sql-server? 您为什么将其标记为 MySQL、SQL Server 和 Redshift?你用的是哪一个? 【参考方案1】:可能在计算运行总计之前按日期求和?
select date,
sum(value) over (order by date) as value
from (
select date, sum(value) as value
from data
group by date
) t
【讨论】:
【参考方案2】:我能想到的最简单的事情是删除前面未绑定的行并包含一个 distinct。
SELECT DISTINCT
[date]
,SUM([value]) OVER (ORDER BY [date]) AS [value]
FROM @tbl
也就是说,您也可以使用 row_number 进行子查询。
SELECT
[date]
,[value]
FROM (
SELECT
[date]
,SUM([value]) OVER (ORDER BY [date]) AS [value]
,ROW_NUMBER() OVER (PARTITION BY [date] ORDER BY [value] DESC) AS [row]
FROM @tbl
) tbl
WHERE [row] = 1
【讨论】:
以上是关于如何使用 sql 和按日期分组显示指标在日期上的累积增长?的主要内容,如果未能解决你的问题,请参考以下文章
猫鼬日期比较没有时间和按createdAt和staffId分组,每周、每月和每年按聚合计算的员工总数?
Oracle里面如何让一段日期按周、月、季度、年分组显示啊?求高手赐教,贴出正确sql追加高分!
sql 显示如何拉出列表,在特定日期之间拉出某些上诉和贡献,以及(customer 4)按customer_no和HAVING S分组