2つの日付フィールドを持つテーブルから最も早い日付のみを取得したいというクエリを表示しています。両方の日付フィールドがNULLである可能性があります。しかし、フィールドの少なくとも1つがnullでない場合にのみ、値を取得したい。また、最初の日付フィールドがnullでない場合は、その値が必要です。言い換えれば、私は最初の日付フィールドを好む。複数の日付フィールドのPostgreSQL caseステートメント
これは私が思いついたものですが、100%これが正しいとは感じません。そして、私はまた、有名な猫を肌にさらす良い方法があると考えています。
Select
o.order_num,
Case
when ro.pay1_date is not null then ro.pay1_date
when ro.pay2_date is not null then ro.pay2_date
End as funding_date
From orders o
left join recon_order ro on(ro.order_id = o.order_id)
Where (ro.pay1_date is not null or ro.pay2_date is not null)
Order by funding_date desc
Limit 500
私が最初にWhere句なしでこのクエリを実行しましたが、それはちょうど私が完全に理解していなかった500のNULL値を、返されました。
私はPostgreSQL 8.1の古いバージョン(私の選択ではありません)で作業しています。しかし、古いバージョンが特定の新しいクエリ構文をサポートしていない可能性があるため、これを伝えるだけです。
これを修正または改善する入力をお寄せいただきありがとうございます。
クールです。また、私のクエリと同じ結果が得られます。しかし、あなたのバージョンはより効率的ですか?それが本質的に優れていると言えることはありますか? – Roberto
あなたのクエリよりも改善されています..両方の日付がnullでない場合、クエリはdate1を出力します(date2より大きい場合でも)。これはcase式の最初の条件であり、条件はチェックされません。 –
私は日付1は、この例では、それがヌルではないが、残念ながら安全であることがより良いので、もう一度ありがとうございます。 – Roberto