SQLで犬の里親募集データから30日以内に譲渡されなかった犬を抽出する方法

PostgreSQL

犬の里親募集データベースでは、譲渡までの期間を管理し、一定期間内に譲渡されなかった犬を特定することが重要です。SQLの日時関数やCASE式を用いることで、30日以内に譲渡されなかった犬を効率的に抽出できます。

基本的な日付条件の設計

譲渡日をrecorded_date列、募集開始日をstart_date列として、DATEDIFF関数を使用し募集からの経過日数を計算します。30日以上経過して譲渡されていない場合に抽出する条件をWHERE句で指定します。

例:
SELECT dog_id, start_date, recorded_date FROM Adoption WHERE recorded_date IS NULL AND DATEDIFF(DAY, start_date, GETDATE()) >= 30;

CASE式を用いたステータス判定

譲渡状況をステータス列で管理する場合、CASE式を使って譲渡済みか未譲渡かを判定し、結果を表示することができます。

例:
SELECT dog_id, start_date, recorded_date, CASE WHEN recorded_date IS NULL AND DATEDIFF(DAY, start_date, GETDATE()) >= 30 THEN '未譲渡30日以上' ELSE '譲渡済みまたは期間内' END AS status FROM Adoption;

複数条件を組み合わせた抽出

犬種や年齢などの条件も組み合わせる場合、ANDやORで条件を追加することで、さらに精密な抽出が可能です。例えば特定犬種かつ30日以上未譲渡の犬を抽出する場合などです。

例:
SELECT dog_id, breed, start_date, recorded_date FROM Adoption WHERE breed = '柴犬' AND recorded_date IS NULL AND DATEDIFF(DAY, start_date, GETDATE()) >= 30;

パフォーマンス向上のポイント

大量データで抽出する場合は、start_dateやrecorded_date列にインデックスを設定するとパフォーマンスが向上します。また、日付演算を事前計算列として保持する方法も有効です。

まとめ

  • DATEDIFF関数で募集開始からの経過日数を計算
  • recorded_dateがNULLかどうかで譲渡状況を判定
  • CASE式でステータス表示を追加可能
  • 犬種や年齢などの追加条件で精密抽出
  • インデックス設定で検索性能を維持

これらの設計を組み合わせることで、里親募集データから30日以内に譲渡されなかった犬を効率的に抽出し、管理や分析に活用できます。

コメント

タイトルとURLをコピーしました