【问题标题】:Aggregate by selecting last element in postgres group by通过选择 postgres 组中的最后一个元素进行聚合
【发布时间】:2013-03-08 07:27:57
【问题描述】:

我有一个包含 postges 中的对象统计信息的表格,其中包含以下列:

  • id 整数
  • object_id 整数
  • 时间戳带有时区的时间戳
  • 尺寸字符变化
  • 整数

注意它使用的是实体-属性-值(eav)模式——实体是object_id,属性是dimension,值是value

每晚运行一个作业,为每个对象(由object_id 指定)收集六个维度(由dimension 指定)的值。

我想构建一个报告页面,显示每个dimension 和每个product 的最新value。查询如下所示:

select object_id, dimension, FIRST(value) from pt_reading group by product_id, dimension order by product_id, dimension, timestamp desc;

FIRST 会选择第一个value,因为我是按时间戳降序排序的。不幸的是,FIRST 不是一个有效的聚合函数。

最好的设计模式是什么?我总是可以回退到用 python 编写它,但它似乎可以由数据库处理。另外,如果我应该使用不同的设计模式来做到这一点,请加入。

【问题讨论】:

标签: postgresql


【解决方案1】:
select distinct on (object_id, dimension)
    object_id,
    dimension,
    value
from pt_reading
order by object_id, dimension, "timestamp" desc;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 2021-02-14
    • 2017-11-28
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2021-11-22
    • 2020-08-30
    相关资源
    最近更新 更多