在庫のない製品の数を取得するためのクエリを作成しました (メーカーが何らかのステータス コードで返した注文を見てわかっています)。製品、日付、および保管場所別に、次のようになります。
SELECT count(*) as out_of_stock,
prod.id as product_id,
ped.data_envio::date as date,
opl.id as storage_id
from sub_produtos_pedidos spp
left join cad_produtos prod ON spp.ean_produto = prod.cod_ean
left join sub_pedidos sp ON spp.id_pedido = sp.id
left join pedidos ped ON sp.id_pedido = ped.id
left join op_logisticos opl ON sp.id_op_logistico = opl.id
where spp.motivo = '201' -- this is the code that means 'not in inventory'
group by storage_id,product_id,date
それは次のような答えを生み出します:
out_of_stock | product_id | date | storage_id
--------------|------------|-------------|-------------
1 | 5 | 2012-10-16 | 1
5 | 4 | 2012-10-16 | 2
ここで、2 日以上、5 日以上など、在庫切れになっている製品の発生数を、製品別および保管別に取得する必要があります。
したがって、最初のクエリで新しいカウントを行い、定義された日間隔で結果の行を集計する必要があると思います。
Postgres の日時関数 ( http://www.postgresql.org/docs/7.3/static/functions-datetime.html ) を調べてみましたが、必要なものが見つかりませんでした。