Mysql 计算余额为正的期间和平均总和
我被窗口功能卡住了 我有一张名为任务的表格: 用户id VARCHAR 日期 平衡整数Mysql 计算余额为正的期间和平均总和,mysql,sql,sqlite,Mysql,Sql,Sqlite,我被窗口功能卡住了 我有一张名为任务的表格: 用户id VARCHAR 日期 平衡整数 +---------+------------+---------+ | user_id | date | balance | +---------+------------+---------+ | 1 | 03.04.2020 | 0 | | 1 | 04.04.2020 | 265 | | 1 | 05.04.2020 | 14
+---------+------------+---------+
| user_id | date | balance |
+---------+------------+---------+
| 1 | 03.04.2020 | 0 |
| 1 | 04.04.2020 | 265 |
| 1 | 05.04.2020 | 140 |
| 1 | 06.04.2020 | 70 |
| 1 | 07.04.2020 | 0 |
| 2 | 03.04.2020 | 535 |
| 2 | 04.04.2020 | 115 |
| 2 | 05.04.2020 | 0 |
| 2 | 06.04.2020 | 0 |
| 2 | 07.04.2020 | 694 |
+---------+------------+---------+
我试图计算出所有平衡持续为正的时期。
因此,输出表应该如下所示:
+---------+------------+------------+-------------+-------------+
| user_id | start_date | end_date | avg_balance | date_length |
+---------+------------+------------+-------------+-------------+
| 1 | 04.04.2020 | 06.04.2020 | 158.3 | 3 |
| 2 | 03.04.2020 | 04.04.2020 | 325 | 2 |
| 2 | 07.04.2020 | 07.04.2020 | 694 | 1 |
+---------+------------+------------+-------------+-------------+
我尝试实现窗口功能,但遇到了问题。通过计算之前的零数来分配时段。然后汇总:
select user_id, min(date), max(date), avg(balance), count(*) as date_length
from (select t.*,
sum( balance = 0 ) over (partition by user_id order by date) as grp
from t
) t
where balance > 0
group by user_id, grp;
是dbfiddle。您使用的是SQLite还是MySQL?我使用的是SQLite。对不起,没有提及。所以我想这就是你的答案对我不起作用的原因。否,
where
子句有输入错误。where balance=0
应该是where balance>0
@tonypdmtr。非常感谢。这可能就是我第一次用“1”的原因。