mysql - MySql 累计总数按天分组在最大总数上
问题描述
我正在尝试计算在给定日期可能出现多次的值的累积总和。因此,我只想保留每一天的最大值。
目前我有:
SELECT
DATE_FORMAT(created_at, '%d/%m') AS day1,
SUM(principal) over (order by created_at) AS tot
FROM loan;
输出:
[
{
"day1" : "21/08",
"tot" : 200
},
{
"day1" : "21/08",
"tot" : 1200
},
{
"day1" : "21/08",
"tot" : 2200
},
{
"day1" : "21/08",
"tot" : 2500
},
{
"day1" : "25/08",
"tot" : 4500
},
{
"day1" : "25/08",
"tot" : 6500
},
{
"day1" : "27/08",
"tot" : 7000
},
{
"day1" : "27/08",
"tot" : 7600
}
]
我知道我需要按天对它进行分组,但它需要为每组天取最大值。有任何想法吗?
当我像这样分组时:
SELECT
DATE_FORMAT(created_at, '%d/%m') AS day1,
SUM(principal) over (order by created_at) AS tot
FROM loan
GROUP BY day1;
我得到:
[
{
"day1" : "21/08",
"tot" : 1000
},
{
"day1" : "25/08",
"tot" : 3000
},
{
"day1" : "27/08",
"tot" : 3500
},
{
"day1" : "30/08",
"tot" : 4200
}
]
这显然是错误的。我不知道为什么它会给出那个输出。但我怎样才能让它正确呢?
解决方案
您需要嵌套总和:
SELECT DATE_FORMAT(created_at, '%d/%m') AS day1,
SUM(SUM(principal)) OVER (ORDER BY MIN(created_at)) AS tot
FROM loan
GROUP BY day1;
我很惊讶你的版本完全有效。它在大多数数据库中都会失败,因为聚合键principal
也不是。created_at
推荐阅读
- nuget - 为什么 Newtonsoft 的最新稳定版本在 Nuget 包管理器中显示为 12.0.3 在一个项目中显示为 9.0.1 在另一个项目中?
- r - 将矩阵的一部分乘以某个数
- javascript - Jest Vue 失败:SyntaxError: Unexpected token 'export'
- java - 如何告诉 maven 插件我的 JSP 位于 `/src/main/webapp/WEB-INF/jsp` 而不是 `src/main/scripts`?
- javascript - 在 React Redux 中打开每个产品时增加查看次数
- spring-boot - Apache骆驼过滤器并发送到不同的路线
- assembly - 如何用Arm的汇编指令计算文件的大小
- laravel - 无法在 Laravel 应用程序中为 html2pdf 设置字体
- android - Android JobScheduler 未在 Vivo 手机上运行期间任务
- javascript - 如何在javascript中将两个数组与新属性合并