mysql - 当日期有差距时,mySQL 更新最近 5 个日期的平均数量
问题描述
我有如下 mySQL 表,有什么方法可以将 table2 中的值更新到 where ?被放置。需要销售实际登记时的最后 5 天平均金额,从表 1 的最后 5 个日期开始,为(9th, 7th, 3rd, 30th, 28th)
| | Table1 | | -------- | | Table2 | |
|---------|------------|--------|----------|---------|------------|----------|
| Brand | Date | Amount | | Brand | As_on | 5day_Avg |
| Samsung | 2020-07-09 | 2000 | | Apple | 2020-07-09 | ? |
| Nokia | 2020-07-09 | 200 | | Samsung | 2020-07-09 | ? |
| Apple | 2020-07-09 | 600 | | Nokia | 2020-07-09 | ? |
| Samsung | 2020-07-07 | 450 | | Others | 2020-07-09 | ? |
| Nokia | 2020-07-07 | 12 | | | | |
| Apple | 2020-07-03 | 450 | | | | |
| Samsung | 2020-07-03 | 45 | | | | |
| Nokia | 2020-07-03 | 350 | | | | |
| Others | 2020-06-30 | 450 | | | | |
| Apple | 2020-06-30 | 500 | | | | |
| Samsung | 2020-06-30 | 850 | | | | |
| Nokia | 2020-06-28 | 100 | | | | |
| Others | 2020-06-27 | 50 | | | | |
| Samsung | 2020-06-26 | 125 | | | | |
解决方案
这是一种方法:
select brand,avg(amount) last5avg from (
select * , row_number() over (partition by brand order by date desc) rn
from table1) t
where t.rn <= 5
group by brand
更新 :
update table2
inner join (
select brand,avg(amount) last5avg from (
select * , row_number() over (partition by brand order by date desc) rn
from table1) t
where t.rn <= 5
group by brand) t1
on t1.brand = t2.brand
set table2.5day_Avg = t1.last5avg;
推荐阅读
- c++ - 如何使用对象数组作为参数?C++
- php - PHP 无法下载超过 40MB 的重量文件
- string - Bash 用 grep 提取字符串
- python - 如何检索前 3 个月的第一个和最后一个日期?
- jdbc - 是否可以通过 SSH 隧道使用 Apache Beam jdbcIO?
- perl - 如何使用 perl 正确解析我的 txt 文件中的行
- javascript - Three.js 错误 --> THREE.Scene 不是构造函数
- java - 解锁锁定同步块的可靠方法
- matlab - 检查边界内的值
- javascript - 如何为表格内开始时间和结束时间之间的剩余时间创建实时倒计时效果?