通过选择postgres组中的最后一个元素进行聚合

时间:2013-03-07 22:41:23

标签: postgresql

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

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

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

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

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

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

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

这样做的最佳设计模式是什么?我总是可以回退到在python中编写它,但它似乎可以由数据库处理。另外,如果我应该使用不同的设计模式,请发出声音。

1 个答案:

答案 0 :(得分:8)

select distinct on (object_id, dimension)
    object_id,
    dimension,
    value
from pt_reading
order by object_id, dimension, "timestamp" desc;