【问题标题】:Rolling Average in sqlitesqlite中的滚动平均值
【发布时间】:2020-07-15 16:47:06
【问题描述】:

我想在表格中计算滚动平均值并跟踪每个计算的窗口框架的开始时间。

我的问题是,与表中的行相比,我希望结果计数减少。但我的查询返回完全相同的行号。我想我明白为什么它不起作用,但我不知道补救措施。

假设我有一个表格,其中包含如下所示的示例数据:

+------+-------+
| Tick | Value |
+------+-------+
|    1 |     1 |
|    2 |     3 |_
|    3 |     5 |
|    4 |     7 |_
|    5 |     9 |
|    6 |    11 |_
|    7 |    13 |
|    8 |    15 |_
|    9 |    17 |
|   10 |    19 |_
+------+-------+

我想计算每第 n 个项目的平均值,例如两行的平均值(见上面的标记),以便得到以下结果:

+--------------+--------------+
| OccurredTick | ValueAverage |
+--------------+--------------+
|            1 |            2 |
|            3 |            6 |
|            5 |           10 |
|            7 |           14 |
|            9 |           18 |
+--------------+--------------+

我试过了

SELECT 
    FIRST_VALUE(Tick) OVER (
        ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
    ) OccurredTick,
    AVG(Value) OVER (
        ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
    ) ValueAverage 
FROM TableName;

我得到的回报是:

+--------------+--------------+
| OccurredTick | ValueAverage |
+--------------+--------------+
|            1 |            2 |
|            2 |            4 |
|            3 |            6 |
|            4 |            8 |
|            5 |           10 |
|            6 |           12 |
|            7 |           14 |
|            8 |           16 |
|            9 |           18 |
|           10 |           19 |
+--------------+--------------+

【问题讨论】:

    标签: sql sqlite group-by average rolling-average


    【解决方案1】:

    您可以使用聚合。如果tick 一直在增加而没有间隙:

    select min(tick), avg(value) avg_value
    from mytable
    group by cast((tick - 1) / 2 as integer)
    

    您可以将2 更改为最适合的组大小。

    如果tick不是顺序递增的,我们可以用row_number()生成一个序列

    select min(tick), avg(value) avg_value
    from (
        select t.*, row_number() over(order by tick) rn
        from mytable t
    ) t
    group by cast((rn - 1) / 2 as integer)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多