0

次の列を持つpostgesのオブジェクト統計を含むテーブルがあります。

  • id整数
  • object_id integer
  • タイムスタンプタイムゾーン付きタイムスタンプ
  • 寸法文字が変化する
  • の整数

エンティティ-属性-値(eav)パターンを使用していることに注意してください-エンティティはobject_id、属性はdimension、値はvalueです。

dimensionオブジェクト(で指定)ごとに6つのディメンション(で指定)の値を収集するジョブが毎晩実行され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;

FIRSTvalueタイムスタンプの説明で並べ替えているので、最初のものを選択します。残念ながら、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 に答える