vertica sql: 运行 总计 1 小时

vertica sql: running sum for 1 hour

我知道论坛上有很多关于 运行 总数的问题,但我不太清楚如何将其应用到我的示例中。如果有人能提供帮助,我们将不胜感激。

我正在尝试通过 'ID' 计算 'speed' 分区的每小时 运行 总数。我该如何进行?我正在使用垂直数据库。谢谢!

DATETIME,ID,speed
05-12-15 0:15,1,40
05-12-15 0:30,1,61
05-12-15 0:45,1,66
05-12-15 1:00,1,48
05-12-15 1:15,1,66
05-12-15 1:30,1,50
05-12-15 1:45,1,47
05-12-15 2:00,1,70
05-12-15 2:15,1,42
05-12-15 2:30,1,58
05-12-15 2:45,1,74
05-12-15 3:00,1,43
05-12-15 3:15,1,57
05-12-15 3:30,1,69
05-12-15 3:45,1,52
05-12-15 4:00,1,43
05-12-15 0:15,2,48
05-12-15 0:30,2,73
05-12-15 0:45,2,41
05-12-15 1:00,2,56
05-12-15 1:15,2,65
05-12-15 1:30,2,76
05-12-15 1:45,2,66
05-12-15 2:00,2,49
05-12-15 2:15,2,75
05-12-15 2:30,2,67
05-12-15 2:45,2,76
05-12-15 3:00,2,47
05-12-15 3:15,2,53
05-12-15 3:30,2,76
05-12-15 3:45,2,63
05-12-15 4:00,2,56

编辑: 最终结果应该是这样的:

您应该可以按 id 分区并使用 range between '1 hour' preceding and current rowRANGE 作用于 ORDER BY 中的值以限制 window 帧。

select datetime, 
       id, 
       speed, 
       sum(speed) over (partition by id 
                        order by datetime desc
                        RANGE BETWEEN '1 hour' PRECEDING 
                              AND CURRENT ROW) sum_speed_1hour
from mytable
order by id, datetime

另外,请注意日期时间描述,根据您的示例,这正是您要查找的内容。

you can try this:

select
    TIME_SLICE(datetime, 1, 'HOUR'),
    sum(speed)
from mytable
group by TIME_SLICE(datetime, 1, 'HOUR')
order by TIME_SLICE(datetime, 1, 'HOUR')