获取接下来的5行的平均值

斯特凡·范霍夫(Stefaan Van Hoof)

我现在有这样一个查询,它可以按天计算测量的平均数,我希望每行平均5天后的平均数

哦...我正在使用Sql Server

这是我所拥有的

SELECT Cast(Cast (Datepart(year, Dateadd(minute, (a.quarternumber * 15), 
            '2000-01-01')) 
                   AS 
            VARCHAR(4)) 
            + '-' 
            + Cast (Datepart(month, Dateadd(minute, (a.quarternumber * 15), 
                   '2000-01-01')) 
            AS VARCHAR(4)) 
            + '-' 
            + Cast (Datepart(day, Dateadd(minute, (a.quarternumber * 15), 
            '2000-01-01') 
                   )AS 
            VARCHAR(4)) 
            + ' ' AS DATETIME) AS [TimeStamp], 
       --AVG(a.value) over(order by a.value) as exper, 
       Round(Avg(a.value), 2)  AS Value 
FROM   measurements.archive a 
       INNER JOIN measurements.points p 
               ON a.pointid = p.id 
       INNER JOIN fifthcore..cm_lod_devices ld 
               ON ld.uuid = p.logicaldeviceuuid 
WHERE  ld.id IN (SELECT value 
                 FROM   @LodDeviceIds) 
       AND p.name = @Name 
       AND a.quarternumber BETWEEN @ChartBeginNumber AND @ChartEndNumber 
GROUP  BY Datepart(year, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01') 
), 
          Datepart(month, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01' 
                          )), 
          Datepart(day, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01')) 
ORDER  BY Datepart(day, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01')) 

我一直在寻找类似的东西,但无法使它正常工作

AVG(y) OVER(ORDER BY x
3 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)


Table                             :extra column that would avg the result of next five days 
2014-07-01 00:00:00.000 16.780000   --> 15.8 
2014-07-02 00:00:00.000 15.940000   --> 16 
2014-07-03 00:00:00.000 16.790000
2014-07-04 00:00:00.000 16.790000
2014-07-05 00:00:00.000 16.040000
2014-07-06 00:00:00.000 16.500000
2014-07-07 00:00:00.000 16.790000
2014-07-08 00:00:00.000 16.790000
2014-07-09 00:00:00.000 16.790000
詹姆斯·S

我认为您的问题是您错误地使用了AVG()WithOVER子句。

您正在使用GROUP BY-,因此AVG()在同一查询中,该查询将应用于该组,而不是整个数据集,因此,如果不先执行子查询或CTE,就无法使用SQL SERVER 2012特定的窗口版本。

这是我认为您可以使其工作的方式,但是请注意-我目前尚未进行实际测试。

WITH cte AS (
    SELECT Cast(Cast (Datepart(year, Dateadd(minute, (a.quarternumber * 15), 
                '2000-01-01')) 
                       AS 
                VARCHAR(4)) 
                + '-' 
                + Cast (Datepart(month, Dateadd(minute, (a.quarternumber * 15), 
                       '2000-01-01')) 
                AS VARCHAR(4)) 
                + '-' 
                + Cast (Datepart(day, Dateadd(minute, (a.quarternumber * 15), 
                '2000-01-01') 
                       )AS 
                VARCHAR(4)) 
                + ' ' AS DATETIME) AS [TimeStamp], 
           Round(Avg(a.value), 2)  AS Value
           SUM (a.value) AS ValueSum, -- New item - required for calculating windowed average from group
           COUNT(a.value) AS ValueCount  -- New item - required for calculating windowed average from group
    FROM   measurements.archive a 
           INNER JOIN measurements.points p 
                   ON a.pointid = p.id 
           INNER JOIN fifthcore..cm_lod_devices ld 
                   ON ld.uuid = p.logicaldeviceuuid 
    WHERE  ld.id IN (SELECT value 
                     FROM   @LodDeviceIds) 
           AND p.name = @Name 
           AND a.quarternumber BETWEEN @ChartBeginNumber AND @ChartEndNumber 
    GROUP  BY Datepart(year, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01') 
    ), 
              Datepart(month, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01' 
                              )), 
              Datepart(day, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01')) 
    ORDER  BY Datepart(day, Dateadd(minute, ( a.quarternumber * 15 ), '2000-01-01'))
)
SELECT 
    [TimeStamp],
    Value,
    SUM(ValueSum) OVER (
        ORDER BY [TimeStamp] ROWS BETWEEN CURRENT ROW AND 5 FOLLOWING
    ) /
    SUM(ValueCount) OVER (
        ORDER BY [TimeStamp] ROWS BETWEEN CURRENT ROW AND 5 FOLLOWING
    ) AS ValueOverNext5 
    -- Average = SUM(x) / COUNT(x) = SUM(SUM(group)) / SUM(COUNT(group))
FROM cte

如您所见,我将查询放入一个公用表表达式中,并为SUM和COUNT添加了2个新列。然后,我将窗口化的AVG OVER应用于这些项(通过执行SUM(total)OVER(...)/ SUM(count)OVER(...)-来自CTE的已取平均值的直线AVG是不正确的)

希望这有意义并且可行!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取接下来的5行的平均值

来自分类Dev

如何基于另一列计算接下来的n行的平均值-SQL(Oracle)

来自分类Dev

是否有任何命令可以在 MATLAB 中的向量中找到前 5 个值的平均值,然后是接下来的 5 个值,总共 1000 个值

来自分类Dev

如何基于另一列计算接下来的n行的平均值-SQL(Oracle)-先前回答的问题的更新版本

来自分类Dev

R选择一行加上接下来的5行

来自分类Dev

Python获取字符串的位置和接下来的X行

来自分类Dev

SQLite查询以获取接下来30天的行(现在和现在+30天之间)

来自分类Dev

在接下来的5次点击后显示div

来自分类Dev

测量数据帧中接下来N行的偏差

来自分类Dev

数据帧中接下来的x行的频率

来自分类Dev

接下来 n 行的更复杂的滚动总和

来自分类Dev

核心数据,仅获取15行,然后在事件触发器上获取接下来的15行

来自分类Dev

核心数据,仅获取15行,然后在事件触发器上获取接下来的15行

来自分类Dev

如何使用“行输入”搜索字符串,然后在Excel单元格中打印接下来的5行

来自分类Dev

使用powershell 2删除一行文本以及接下来的0至5行

来自分类Dev

MySQL-获取行和行的平均值

来自分类Dev

接下来在Ruby中什么无效?

来自分类Dev

如何打印接下来的几行

来自分类Dev

对于每个...接下来不循环

来自分类Dev

获取某行的平均值

来自分类Dev

获取数字平均值

来自分类Dev

PostgreSQL:获取与列匹配的行的平均值

来自分类Dev

从表中的“最后” N行获取平均值

来自分类Dev

获取SQL中每X行的平均值

来自分类Dev

Bash(awk)-从数字行获取平均值

来自分类Dev

按行获取数据框列表的平均值

来自分类Dev

获取显示每年MYSQL平均值的行的列表

来自分类Dev

从所选行中获取值并计算其平均值

来自分类Dev

Pandas:分组,过滤行,获取平均值

Related 相关文章

  1. 1

    获取接下来的5行的平均值

  2. 2

    如何基于另一列计算接下来的n行的平均值-SQL(Oracle)

  3. 3

    是否有任何命令可以在 MATLAB 中的向量中找到前 5 个值的平均值,然后是接下来的 5 个值,总共 1000 个值

  4. 4

    如何基于另一列计算接下来的n行的平均值-SQL(Oracle)-先前回答的问题的更新版本

  5. 5

    R选择一行加上接下来的5行

  6. 6

    Python获取字符串的位置和接下来的X行

  7. 7

    SQLite查询以获取接下来30天的行(现在和现在+30天之间)

  8. 8

    在接下来的5次点击后显示div

  9. 9

    测量数据帧中接下来N行的偏差

  10. 10

    数据帧中接下来的x行的频率

  11. 11

    接下来 n 行的更复杂的滚动总和

  12. 12

    核心数据,仅获取15行,然后在事件触发器上获取接下来的15行

  13. 13

    核心数据,仅获取15行,然后在事件触发器上获取接下来的15行

  14. 14

    如何使用“行输入”搜索字符串,然后在Excel单元格中打印接下来的5行

  15. 15

    使用powershell 2删除一行文本以及接下来的0至5行

  16. 16

    MySQL-获取行和行的平均值

  17. 17

    接下来在Ruby中什么无效?

  18. 18

    如何打印接下来的几行

  19. 19

    对于每个...接下来不循环

  20. 20

    获取某行的平均值

  21. 21

    获取数字平均值

  22. 22

    PostgreSQL:获取与列匹配的行的平均值

  23. 23

    从表中的“最后” N行获取平均值

  24. 24

    获取SQL中每X行的平均值

  25. 25

    Bash(awk)-从数字行获取平均值

  26. 26

    按行获取数据框列表的平均值

  27. 27

    获取显示每年MYSQL平均值的行的列表

  28. 28

    从所选行中获取值并计算其平均值

  29. 29

    Pandas:分组,过滤行,获取平均值

热门标签

归档