从交易表生成每日余额

时间:2021-07-16 07:19:23

标签: mysql

列表项

我有这种类型的记录:

<头>
... user_id ... 日期 ... current_balance ...
... 1 ... 2021-06-30 05:21:03 ... 20.95629595 ...
... 1 ... 2021-07-02 10:17:25 ... 21.95629595 ...
... 1 ... 2021-07-02 11:07:23 ... 20.95629595 ...
... 14 ... 2021-07-02 11:40:34 ... 1.42046290 ...
... 1 ... 2021-07-02 11:59:15 ... 21.87674098 ...
... 1 ... 2021-07-02 12:06:12 ... 22.79712675 ...
... 1 ... 2021-07-02 12:24:11 ... 21.79712675 ...
... 14 ... 2021-07-02 12:37:11 ... 11.42046290 ...
...

我的目标是在 MySQL 中实现这个结果:

<头>
user_id 日期 平均
1 2021-06-30 20.956295950000
1 2021-07-01 20.956295950000
1 2021-07-02 17.460644597143
1 2021-07-03 17.460644597143
1 2021-07-04 17.460644597143
1 2021-07-05 17.460644597143
...直到下一个日期它有不同的平均值

如果计算平均值之后的下一个日期没有任何值,它将用之前的平均值填充。

这是我当前的查询:

SELECT c.date,AVG(IFNULL(a.current_balance,0)) AS balance FROM users_balancemaster a 
RIGHT JOIN calendar c ON c.date= DATE(a.ondate) GROUP BY c.date

但它在没有平均值的日期返回零。

+---------+------------+-----------------+
| user_id | date       |     average     |
+---------+------------+-----------------+
|    1    | 2021-06-30 | 20.956295950000 |
|    1    | 2021-07-01 | 0.000000000000  | <<--
|    1    | 2021-07-02 | 17.460644597143 | 
|    1    | 2021-07-03 | 0.000000000000  | <<--
|    1    | 2021-07-04 | 0.000000000000  | <<--
|    1    | 2021-07-05 | 0.000000000000  | <<--
....

1 个答案:

答案 0 :(得分:1)

您使用的版本我不知道,所以我选择了 MySQL 5.7。

df1 <- mtcars[1:4]

combn(names(df1), 2, function(x){
  d <- df1[x]
  names(d) <- x
  d
}, simplify = FALSE)

example