1

在庫のない製品の数を取得するためのクエリを作成しました (メーカーが何らかのステータス コードで返した注文を見てわかっています)。製品、日付、および保管場所別に、次のようになります。

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 ) を調べてみましたが、必要なものが見つかりませんでした。

4

2 に答える 2

1

あなたの質問を正しく理解できなかったかもしれませんが、サブクエリを活用する必要があるようです。

ここで、2 日以上在庫切れになっている製品の発生数を、製品別および保管別に取得する必要があります。

そう:

SELECT COUNT(*), date, product_id FROM ( YOUR BIG QUERY IS THERE ) a
WHERE a.date < (CURRENT_DATE - interval '2' day)
GROUP BY date, product_id
于 2013-09-27T14:58:24.250 に答える