2013-03-07 87 views
0

我有一個包含對象的統計信息在postges與下列的表中選擇在postgres的組的最後一個元素:骨料通過

  • ID整數
  • 的object_id整數
  • 時間戳時間戳帶時區
  • 尺寸字符變化
  • 整數

注意,它使用該實體屬性值(EAV)模式 - 實體是object_id,屬性是dimension,值是value

作業每晚都會爲每個對象(由object_id指定)在六個維度上(由dimension指定)收集值。

我想建立一個報告頁面,顯示每個product每個dimension最近的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編寫它,但似乎可以通過數據庫來處理。另外,如果我有一個不同的設計模式,請使用它來做到這一點。

+0

對於一些解釋,你可能會感興趣的[此相關答案](http://stackoverflow.com/questions/3800551/sql-select-first-row-in-each-group-by-group/ 7630564#7630564)。 – 2013-03-08 02:24:18

回答

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