当前位置: 首页 > 面试题库 >

PostgreSQL聚合或窗口函数仅返回最后一个值

伯庆
2023-03-14
问题内容

我在PostgreSQL
9.1中使用带有OVER子句的聚合函数,并且只想返回每个窗口的最后一行。该last_value()窗口的功能听起来像它可能做我想做的-
但事实并非如此。它为窗口中的每一行返回一行,而我希望每个窗口仅一行

一个简化的例子:

SELECT a, some_func_like_last_value(b) OVER (PARTITION BY a ORDER BY b)
FROM
(
    SELECT 1 AS a, 'do not want this' AS b
    UNION SELECT 1, 'just want this'
) sub

我希望它返回一行:

1, 'just want this'

问题答案:

[DISTINCT](http://www.postgresql.org/docs/current/interactive/sql-

select.html#SQL-DISTINCT) 加窗功能

添加一个DISTINCT子句:

SELECT DISTINCT a
     , last_value(b) OVER (PARTITION BY a ORDER BY b
                           RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM  (
   VALUES
     (1, 'do not want this')
    ,(1, 'just want this')
   ) sub(a, b);

有关更多DISTINCT

  • PostgreSQL:“按分钟”运行查询的行数

使用更简单,更快 [`DISTINCT

ON`](http://www.postgresql.org/docs/current/interactive/sql-select.html#SQL-
DISTINCT)

PostgreSQL还具有SQL标准的以下扩展:

SELECT DISTINCT ON (a)
       a, b
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
ORDER  BY a, b DESC;

简单的案例与简单的聚合

如果 您的案例实际上和您的演示一样简单(并且您不需要最后一行的其他列),那么简单的聚合函数将更简单:

SELECT a, max(b)
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
GROUP  BY a;


 类似资料:
  • 尝试合并多个 Kafka 流,聚合

  • 问题内容: 我有一个pojo,尝试将csv文件中的数据读取到列表中,然后将其打印出来。从文件读取工作正常,在读取/添加的瞬间,我可以看到正确的ID,但是一旦尝试将其全部打印回来,我只会得到列表的最后一个元素。以下是我正在尝试的: 我从上面得到的输出是: 团队编号为:1 团队编号为:2 团队编号为:3 团队编号为:4 球队信息:4 球队信息:4 球队信息:4 球队信息:4 我想念什么..?为什么前三

  • 问题内容: 我想在PostgreSQL上设置一个返回表的函数。这是该函数的源代码: 调用该函数仅返回一列,并用’,’分隔值: 我期望有不同的列(在函数的开头为表指定的每个值一个),而不仅仅是所有值的列。有谁知道为什么会这样,我该如何解决? 谢谢蒂莫 问题答案: 使用 代替 以获得表格的结果。 (像对待表一样处理该函数。)

  • 我们计划将Apache Flink与一个巨大的IOT设置一起使用。客户将向我们发送某种结构化的传感器数据(如sensor_id、sensor_type、sensor_value、timestamp)。我们没有控制每个客户何时发送这些数据,最有可能是实时的,但我们没有保证。我们将所有事件存储在RabbitMQ/Kafka中。更新:我们可以假设每个传感器的事件是按顺序来的。 在开始实施可能的流式管道之

  • 我有一个,它是由一个kafka主题创建的,并且指定了属性。 当我试图创建一个时,会话窗口化了一个查询,如下所示: 我总是得到错误: KSQL不支持对窗口表的持久查询 如何在KSQL中创建开始会话窗口的事件的?