0

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

  • id整数
  • object_id整数
  • 带时区的时间戳
  • 尺寸特征变化
  • 整数

请注意,它使用的是实体-属性-值(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,因为我是按时间戳降序排序的。不幸的是,FIRST 不是一个有效的聚合函数。

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

4

1 回答 1

8
select distinct on (object_id, dimension)
    object_id,
    dimension,
    value
from pt_reading
order by object_id, dimension, "timestamp" desc;
于 2013-03-07T22:55:49.187 回答