PostgreSQL 使用组和顺序计算滚动平均值

2024-02-04

我有一张表如下

id    |   x    |  y    |  value
------+--------+-------+------------
 1    |   1    |  1    |  25
 1    |   1    |  2    |  42
 1    |   2    |  3    |  98
 1    |   2    |  4    |  54
 1    |   3    |  5    |  67
 2    |   1    |  1    |  78
 2    |   1    |  2    |  45
 2    |   2    |  3    |  96

我必须按 id 对其进行分组,同时按 id、x 和 y(按各自的顺序)保持顺序,并计算前 n 行的滚动平均值。例如,如果 n = 3

id    |   x    |  y    |  value | rollingAvg
------+--------+-------+--------+-----------
 1    |   1    |  1    |  25    |      25
 1    |   1    |  2    |  42    |   (25 / 1) = 25
 1    |   2    |  3    |  98    | (25+42/2) = 33.5
 1    |   2    |  4    |  54    | (25+42+98 /3) = 55
 1    |   3    |  5    |  67    | (42+98+54 /3) = 64.67
 2    |   1    |  1    |  78    |      78
 2    |   1    |  2    |  45    |   (78/1) = 78
 2    |   2    |  3    |  96    |  (78+45 / 2) = 61.5

Logic is

1)如果按id分组时该行是第一行,则该值应该是平均值

2)平均值不应包括当前行

提前致谢


我们可以使用AVG()带有窗口框架的函数仅覆盖前三行:

select
    id,
    x,
    y,
    coalesce(avg(value) over
        (partition by id order by y rows between 3 preceding AND 1 preceding), value) as rollingAvg
from your_table
order by id, y;

致电给COALESCE()是必要的,因为您似乎期望如果前三行都是NULL(这发生在每个id组),然后是当前行的value应该使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 使用组和顺序计算滚动平均值 的相关文章

  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • SQL Server 连接其他表中不存在的位置

    Service Asset AssetService Id Name Id Name AssetId ServiceId
  • 如何识别拼写不同的相似单词

    我想从数据库中过滤掉重复的客户名称 一位客户可能有多个同名但拼写差异不大的系统条目 这是一个示例 名为 Brook 的客户可能有 3 个系统条目 有了这个变化 布鲁克 贝尔塔 布鲁克 贝尔塔 比鲁克 贝尔塔 假设我们将此名称放入一个数据库列
  • 删除数据库中的行后如何重新排序ID

    我正在使用 C 来制作具有 sql 数据库的程序 在数据库中我有一个名为Workers 它有一个自动增量和主键ID column 当我删除一条记录时 ID 之间会出现间隙 删除记录后如何重新排序 ID UPDATE 我要做的就是找到记录后将
  • 从postgresql中的jsonb嵌套数组中删除键值对

    我有 jsonb 数据作为 a b 1 c 2 d 3 b 4 c 5 d 6 g b 1 c 2 d 3 b 4 c 5 d 6 我想从 a 和 g 键的嵌套数组中删除 c 键 是否有一个查询可以执行此操作 SELECT jsonb ob
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • 如何通过SQL查询检查是否有JSON函数?

    有SQL 2016 中的 JSON 函数 https learn microsoft com en us sql t sql functions json functions transact sql例如 JSON VALUE JSON Q
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR
  • 有什么方法可以加快 Postgres 位图堆扫描速度吗?

    这里是数据库新手 这是我的查询 我使用的是 Postgres 9 3 5 explain analyse SELECT SUM actual cost as cost SUM total items as num items process
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • SQL 按 IN 子句中的元素排序

    我有一个ITEM表 我想返回按 IN 子句中通知的相同顺序排序的结果 这些 ID 由用户告知 今天我有这个 SELECT FROM ITEM WHERE ITEM ID IN 45 2 671 6 ORDER BY CASE ITEM ID
  • Oracle 中仅在一列上不同

    我想在下表中使用不同的值 但仅在 PlayerID 列上使用 这就是我现在所拥有的 MATCHID PLAYERID TEAMID MATCHDATE STARTDATE 20 5 2 14 JAN 12 01 JUN 11 20 5 4
  • 在 MySQL 中将值设置为 NULL

    我想要一个值被设置为NULL如果我提交的表单中的文本框中没有输入任何内容 我怎样才能做到这一点 我试过插入 NULL 但这只是添加了这个词NULL进入现场 我不确定我应该为此提供什么代码 我只是编写一个 UPDATE 查询 不要放NULL更
  • MySQL为每个组创建带有序列号的视图

    我在此网站上看到了类似的解决方案 但由于变量使用限制 它在视图中不可用 在MySQL中为每个组生成序列 https stackoverflow com questions 30118096 generating sequence for e
  • 从逗号分隔的字符串中删除重复项 (Amazon Redshift)

    我正在使用亚马逊红移 我在该字符串中有一个列存储为逗号分隔 例如Private Private Private Private Private Private United Healthcare 我想使用删除其中的重复项query 所以结果
  • 如何使用单个查询对从另一个表检索的表列表进行 UNION?

    我有一个表 其中包含 PostgreSQL 中的表列表 id table 1 table1 2 table2 3 table3 我想从所有这些表的联合中进行选择 例如 伪代码 select from union select table f
  • MySQL - 连接 a 或 b

    假设我有一个TABLE a其中一个COLUMN data是一个join其他 2 张桌子 TABLE b and TABLE c 因为我想得到一个COLUMN info in b or c 事情是a data将匹配only with b da
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS

随机推荐

  • Qt GUI事件记录和回放

    我正在尝试实现一个简单 轻量级的系统来记录 Qt GUI 事件并从脚本中回放它们 我认为使用 Qt 事件系统的魔力这将是相当简单的 但我遇到了一个我不明白的问题 这是我正在做的事情的快速总结 记录 I use QApplication in
  • Perl 的首选单元测试框架是什么?

    我对 Perl 有点陌生 我想知道是否有首选的单元测试框架 谷歌向我展示了一些不错的结果 但由于我是新手 我不知道社区内是否有明确的偏好 Perl 附带了一整套很棒的测试工具 Perl 核心有数以万计的自动检查 并且大部分都使用这些标准 P
  • ActiveRecord::Base 上的 alias_method 导致 NameError

    我有一个直接继承自的模型ActiveResource Base 我正在尝试运行alias method对于记录表中的大多数列 但结果是 NameError 名称错误 未定义的方法address line 1 for class LeadIm
  • 如何使用 CSharp SQLite 加速 SQL 查询?

    背景 我有一个 SQLite3 数据库并且正在使用CSharp SQLite http code google com p csharp sqlite 来查询数据 我的问题是任何使用 JOIN 或 ORDER BY 调用的查询都非常慢 使用
  • JavaScript 中的instanceof 是如何工作的?

    在以下代码示例中 最后对 obj2 和 obj3 进行了检查实例化即使构造方式不同并且返回结果也返回 truename属性不同 var Obj1 function this name foo1 Obj1 prototype name foo
  • 将传单地图组合在一起

    我生成了这两个关于地理坐标的随机数据集 例如 每个点代表法国的一家假想餐厅 id 1 1000 long 2 2945 rnorm 1000 0 1085246 0 1 lat 48 8584 rnorm 1000 0 009036273
  • 3D 迷宫中的最短路径

    我正在尝试编写一个程序来使用递归查找 3D 迷宫中的最短路径 我能够编写找到穿过迷宫的随机路径的代码 但我想知道如何修改我的代码以找到最短路径 请注意 我想保留递归方法 有人可以提出解决方案吗 这是一个二维迷宫示例 s XXXX XX X
  • MVC 4 客户端验证不起作用

    谁能告诉我为什么客户端验证在我的 MVC 4 应用程序中不起作用 layout cshtml Scripts Render bundles jquery RenderSection scripts required false 在我的 we
  • 使用 Flex 和 Bison 的简单 Java 语法

    我最近开始学习基本的 Flex 和 Bison 因为我必须为简单 但不是太简单 语法制作一个解析器 我决定在我的语法中制作一种简化的 Java 语言 我做了 l和 y文件和所有内容都编译没有错误 我正在使用 gcc 进行编译 问题是每次我运
  • 查找一个文件中不存在于另一个文件中的行[重复]

    这个问题在这里已经有答案了 我有两个文件 假设a txt and b txt 两者都有一个名称列表 我已经跑了sort在这两个文件上 现在我想找到来自a txt哪些不存在于b txt 我花了很多时间寻找这个问题的答案 所以记录下来以供将来参
  • 使用 Amazon Beanstalk 部署 play2 应用程序的最佳方式

    我发现零碎的指令here https stackoverflow com questions 11918820 java play 2 deployment以及其他一些关于在 amazon ec2 上部署 Play2 应用程序的地方 但没有
  • 为什么以及如何在 React 组件中使用类名实用程序?

    您能简单地向我解释一下使用的目的是什么吗类名 https github com JedWatson classnamesReact 代码中的实用程序 我刚刚阅读了 Classnames 文档 但我仍然无法理解在代码中使用它的主要原因是什么
  • 我可以在 C++ 项目中混合使用 c 和 cpp 文件吗?

    我有一个项目 其中混合了 c 文件和 cpp 文件 链接器向我抛出错误 undefined reference to
  • 如何在C#中嵌入VBS并运行它?

    我有一个运行良好的 VBScript 我有一个 C 程序 可以使用 cscript 程序运行 VBScript 我想要做的是将 VBS 嵌入到 C exe 中 这样它就是一个文件 并且能够运行 VBS 文件 有什么方法可以将嵌入式 VBSc
  • Android 无法实例化应用程序 java.lang.ClassNotFoundException:

    我正在开发 Android 市场上托管的应用程序 有时 每月一次 我收到一份崩溃报告 无法实例化应用程序 java lang ClassNotFoundException 应用程序下载量在 10 000 50 000 之间 我不知道为什么在
  • 如何将图像添加到 JFrame 标题栏?

    我想添加一个图像 小图标 到javax swing JFrame标题栏 我该怎么做 Since JPanel没有标题栏 我假设您指的是JFrame 话虽如此 使用setIconImage http download oracle com j
  • C++11 std 相当于 Boost has_dereference

    Boost 的许多 SFINAE 助手已经随 C 11 一起出现在 std 库中 但是has dereference似乎没有 除了这个功能之外 我已经设法从我的包中消除了 Boost 依赖项 并且我想完全摆脱它 那么如何最好地仅使用 C 1
  • XML 转换和换行符

    好的 我有适用于此 xml 的代码
  • 使用java的小型http服务器?

    我使用 java 创建了以下测试服务器 import java io import java net class tcpServer public static void main String args ServerSocket s nu
  • PostgreSQL 使用组和顺序计算滚动平均值

    我有一张表如下 id x y value 1 1 1 25 1 1 2 42 1 2 3 98 1 2 4 54 1 3 5 67 2 1 1 78 2 1 2 45 2 2 3 96 我必须按 id 对其进行分组 同时按 id x 和 y