选择按5分钟周期分组的平均记录

皮特·祖杜纳克

我有一个小问题。我有这样格式的PostgreSQL表

time (datetime)     | players (int) | servers (int)
---------------------------------------------------
2013-12-06 13:40:01 | 80            | 20
2013-12-06 13:41:13 | 78            | 21
etc.

我想按5分钟的时间对它们进行分组,并将该组的平均值作为一个单一值,因此将有20%的记录,每个记录平均包含〜5个数字,时间设置为中的第一个时间值群组。我不知道如何在PgSQL中执行此操作。因此结果将是:

2013-12-06 13:40:01 | avg of players on :40, :41, :42, :43, :44 | same with servers
2013-12-06 13:45:05 | avg of players on :45, :46, :47, :48, :49 | same with servers
2013-12-06 13:50:09 | avg of players on :50, :51, :52, :53, :54 | same with servers
2013-12-06 13:55:12 | avg of players on :55, :56, :57, :58, :59 | same with servers
欧文·布兰德斯特
SELECT grid.t5
      ,min(t."time") AS min_time
--    ,array_agg(extract(min FROM t."time")) AS 'players_on' -- optional
      ,avg(t.players) AS avg_players
      ,avg(t.servers) AS avg_servers
FROM (
   SELECT generate_series(min("time")
                         ,max("time"), interval '5 min') AS t5
   FROM tbl
   ) grid
LEFT JOIN tbl t ON t."time" >= grid.t5
               AND t."time" <  grid.t5 +  interval '5 min'
GROUP  BY grid.t5
ORDER  BY grid.t5;

说明

  • 子查询grid每5分钟从表中的最小值“到最大值”产生一行time"

  • 以5分钟为间隔将LEFT JOIN返回表切片数据。仔细包括下边框,并排除上边框。

  • 要放弃5分钟的时间而什么也没发生,请使用JOIN代替LEFT JOIN

  • 要使您的发车时间从0:00、5:00等开始,请向下舍min("time")generate_series()

这些相关答案中的更多解释:
按数据间隔分组
PostgreSQL:“按分钟”运行查询的行数

另外:我不会使用它time作为标识符。它是标准SQL中保留字,而在Postgres中是函数/类型名。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel选择5分钟以上的记录?

来自分类Dev

Time()通过5分钟选择

来自分类Dev

按熊猫30分钟的空间分组

来自分类Dev

SQLite选择在最近5分钟内插入或更新的记录

来自分类Dev

将1分钟数据汇总为5分钟平均数据

来自分类Dev

按ID分组,按时间分组(每个活动5分钟以内),在R中查找活动的时差

来自分类Dev

SQL将5分钟的3行分组为15分钟的单个行

来自分类Dev

以5分钟为间隔对DataFrame进行分组

来自分类Dev

删除时间戳记超过5分钟的记录

来自分类Dev

删除时间戳记超过5分钟的记录

来自分类Dev

如何获得每5分钟的间隔记录?

来自分类Dev

以一分钟为增量选择分钟平均

来自分类Dev

使用T-SQL窗口函数从1分钟数据中检索5分钟平均值

来自分类Dev

如何将数据库记录分组为15分钟的时间间隔

来自分类Dev

Postgres按连续事件分组,如果间隔超过10分钟,则中断

来自分类Dev

当datetime列按20分钟分组时如何聚合字典列

来自分类Dev

在30分钟内选择“交易类型适合特定订单”的用户ID并对其分组

来自分类Dev

MySQL查询以选择前一分钟的记录

来自分类Dev

mysql选择时间戳距离为3分钟的记录

来自分类Dev

在SQL Server中将时间字段分组为5分钟

来自分类Dev

每5分钟对字母数字数据进行分组-Pandas DataFrame

来自分类Dev

如何从SQL数据库表中获取最近5分钟的记录?

来自分类Dev

如何删除数据库中5分钟内取消的订单记录?

来自分类Dev

Grails-.withCriteria仅获取最近5分钟内创建的记录

来自分类Dev

如何从SQL数据库表中获取最近5分钟的记录?

来自分类Dev

Laravel 5今天有30分钟或更长时间的搜索记录

来自分类Dev

在5分钟内安装Roo

来自分类Dev

仅运行setInterval 5分钟?

来自分类Dev

bash到5分钟

Related 相关文章

  1. 1

    Laravel选择5分钟以上的记录?

  2. 2

    Time()通过5分钟选择

  3. 3

    按熊猫30分钟的空间分组

  4. 4

    SQLite选择在最近5分钟内插入或更新的记录

  5. 5

    将1分钟数据汇总为5分钟平均数据

  6. 6

    按ID分组,按时间分组(每个活动5分钟以内),在R中查找活动的时差

  7. 7

    SQL将5分钟的3行分组为15分钟的单个行

  8. 8

    以5分钟为间隔对DataFrame进行分组

  9. 9

    删除时间戳记超过5分钟的记录

  10. 10

    删除时间戳记超过5分钟的记录

  11. 11

    如何获得每5分钟的间隔记录?

  12. 12

    以一分钟为增量选择分钟平均

  13. 13

    使用T-SQL窗口函数从1分钟数据中检索5分钟平均值

  14. 14

    如何将数据库记录分组为15分钟的时间间隔

  15. 15

    Postgres按连续事件分组,如果间隔超过10分钟,则中断

  16. 16

    当datetime列按20分钟分组时如何聚合字典列

  17. 17

    在30分钟内选择“交易类型适合特定订单”的用户ID并对其分组

  18. 18

    MySQL查询以选择前一分钟的记录

  19. 19

    mysql选择时间戳距离为3分钟的记录

  20. 20

    在SQL Server中将时间字段分组为5分钟

  21. 21

    每5分钟对字母数字数据进行分组-Pandas DataFrame

  22. 22

    如何从SQL数据库表中获取最近5分钟的记录?

  23. 23

    如何删除数据库中5分钟内取消的订单记录?

  24. 24

    Grails-.withCriteria仅获取最近5分钟内创建的记录

  25. 25

    如何从SQL数据库表中获取最近5分钟的记录?

  26. 26

    Laravel 5今天有30分钟或更长时间的搜索记录

  27. 27

    在5分钟内安装Roo

  28. 28

    仅运行setInterval 5分钟?

  29. 29

    bash到5分钟

热门标签

归档