我有一个包含帖子中对象统计信息的表格,其中包含以下列:
请注意,它使用的是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中编写它,但它似乎可以由数据库处理。另外,如果我应该使用不同的设计模式,请发出声音。
答案 0 :(得分:8)
select distinct on (object_id, dimension)
object_id,
dimension,
value
from pt_reading
order by object_id, dimension, "timestamp" desc;