问题标签 [window-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - GROUP BY 由间隔分隔的连续日期
假设您(在 Postgres 9.1 中)有一个像这样的表:
其中有一些差距(我的意思是:并非 min(date) 和 max(date) 之间的每个可能的日期都有它的行)。
我的问题是如何聚合这些数据,以便分别处理每个一致的组(没有间隙),如下所示:
任何想法如何做到这一点?我相信窗口功能是可能的,但经过一段时间的尝试,lag()
我lead()
有点卡住了。
例如,如果数据是这样的:
输出(sum
作为汇总)将是:
sql-server - 如何计算 TSQL 中另一列中每个值的模式
我有一张这样的桌子:
我正在尝试计算每种性别的模式组。换句话说,对于每个性别,告诉我哪个是最受欢迎的群体。所以我想要的结果如下:
在平局的情况下,我需要为每个平局组返回一个记录。
如何在 TSQL 中优雅地做到这一点?我想我需要使用一个窗口功能,但我一直在努力解决它。
postgresql - 在postgresql中基于每N天分组
我有一个包含 ID、日期、值(温度)和其他一些东西的表。我的表如下所示:
我想每 10 天执行一次聚合查询,例如 sum 和 mean。
我想知道是否可以在 psql 中使用?
arrays - 按行数聚合值
我有一系列行,我需要将这些行中的值聚合到N
元素组中,从当前行和N-1
后续行中累积值。
和N=3
数据是:
我想收到以下一组行(数组):
重要的是,这N
是一个变量,所以我不能使用连接。
sql - 连续重复/重复的有序计数
我非常怀疑我是否以最有效的方式这样做,这就是我plpgsql
在这里标记的原因。对于一千个测量系统,我需要在20 亿行上运行它。
您的测量系统通常会在失去连接时报告先前的值,并且它们经常会因为突然但有时很长时间而失去连接。您需要汇总,但是当您这样做时,您需要查看它重复了多长时间并根据该信息制作各种过滤器。假设您正在测量汽车的 mpg,但它停留在 20 mpg 一个小时,然后移动到 20.1,依此类推。您需要在卡住时评估准确性。您还可以放置一些替代规则来查找汽车何时在高速公路上行驶,并且通过窗口功能,您可以生成汽车的“状态”并进行分组。无需再费周折:
那么,为了在一个巨大的桌子上运行它,你会做些什么不同的事情,或者你会使用什么替代工具?我正在考虑 plpgsql,因为我怀疑这需要在数据库中或在数据插入过程中完成,尽管我通常在加载数据后处理数据。有没有办法在不诉诸子查询的情况下一次性完成?
我已经测试了一种替代方法,但它仍然依赖于子查询,我认为这更快。对于该方法,您可以使用 start_timestamp、end_timestamp、system 创建一个“开始和停止”表。然后加入更大的表,如果时间戳介于两者之间,则将其归类为处于该状态,这本质上是cumlative_sum_of_nonrepeats_by_system
. 但是,当您这样做时,您会以 1=1 的方式加入数千台设备和数千或数百万个“事件”。你认为这是一个更好的方法吗?
sql - 每小时汇总一个小时范围内的值
我有一个 PostgreSQL 9.1 数据库,其中包含一个包含时间戳和测量值的表
我需要在每小时 8 小时的范围内平均该值。换句话说,我需要 1h-8h、2h-9h、3h-10h 等的平均值。
我不知道如何进行这样的查询。我到处寻找,但也不知道要寻找什么功能。
我发现的收盘价是每小时/每天的平均值或块平均值(例如 1h-8h、9h-16h 等)。但在这些情况下,时间戳只是使用date_trunc()
函数进行转换(如下例所示),这对我没有用处。
我想我正在寻找的是与此类似的功能
但是随后在 group-by 子句中使用某种 8 小时范围来表示每个小时。这甚至可能吗?
sql - 获取连接表列的不同总和
我这里有一个问题,我希望有一个简单的解决方案。我会尽量简化:
- 票属于参加者
- 例子:
- 与会者有一个名为“收入”的小数列
也就是说,我需要运行一个查询,该查询将返回有关门票的各种信息,包括总收入。问题是,如果 2 张门票属于同一个与会者,则会将他们的收入计算两次。我怎样才能只对与会者收入进行一次汇总?
我不想使用子查询,因为我的 ORM 让这很困难。另外,如果我想对多列执行此操作,则子查询解决方案无法扩展。
这是我所拥有的:
- 1 名与会者收入为 100
- 2 张都属于该与会者的门票
=> 这告诉我attendees_revenue
是 200。我希望它是 100。因为数据库中有一个出席者的 existing_revenue 为 100。我不希望出席者被重复计算。
请让我知道这是否可能。
sql - 平均超过难以定义的分区
我有这张桌子:
我想要这个输出:
当表格按日期降序排序时,我希望将空值以及前一个非空值替换为前一个非空值的平均值。在此示例中,值 15 是接下来两个空值的前一个非空值。所以 15 / 3 = 5。
sql - PostgreSQL 中的窗口函数尾随日期
我正在尝试编写一个查询来比较给定计算机今天的平均连接数与 7 到 14 天前的平均连接数。我认为这最好由窗口函数处理,但我无法获得正确的日期语法。
假设我有一个名为 iptable 的 IP 地址和连接记录表,其中包含 soucreip、destinationip、timestamp 作为列。这是我在前 7 天窗口中尝试的查询,以获取每个 sourceip 的计数:
编写此类查询的最佳方法是什么?窗口函数方法是否有意义,或者是否有更优化的方法来处理大型表的情况?
sql - 获取具有 max(timestamp) 的行
我需要选择最近评论的文章,以及每篇文章的最后评论,即包含以下内容的行的其他列max(c.created)
:
Postgres 告诉我必须将 c.text 放入 GROUP BY。显然,我不想这样做。最小值/最大值也不合适。我不知道如何选择这个。
请指教。