私は2つのテーブル:orders
とcontragents
を持っています。それぞれの対立は、多くの命令を持つかもしれません。各注文にはorder_date
があります。私はそれぞれの対立するものの最初の注文日を取っておきたいが、注意書きを書いておく:180日以上の注文間にギャップがあれば、ギャップの前にそれらを「忘れる」必要がある(そしてギャップを考慮した最初の注文。「最初の」このためPostgresql:JOINでWITHサブクエリを使用する方法
、私は、次のステートメントを実装しました:
with o1 as (
select order_date, lag(order_date) over(order by order_date ASC) as prev_order_date
from orders o
where o.contragent_code = :code
order by order_date desc)
select o1.date_debts from o1
where extract(day from o1.order_date-o1.prev_order_date)>=180 or o1.prev_order_date is null
order by order_date desc
limit 1
これは私が必要なものであるコードcode
、とcontragentのために返される単一の値になり
しかし私はできませんどのようにこの日付を返すだろう選択を実行する方法を理解するfまたはテーブル内のすべての矛盾!
唯一の方法は、CREATE FUNCTION
を使用していましたが、実際にはそれを行うことができないため、アドバイスをいただきありがとうございます。