Mysql 计算余额为正的期间和平均总和

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

我被窗口功能卡住了

我有一张名为任务的表格:

用户id VARCHAR 日期 平衡整数

+---------+------------+---------+
| 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”的原因。