次の表( validity_periodという名前を付けましょう):
------------------------------- id | valid_from | まで有効 ------------------------------- 1 2012-11-12 2012-12-02 2 2012-12-03 NULL 3 2012-12-15 2012-12-21
(valid_from はnull可能ではありません。valid_untilはnull可能ですが、nullである必要はありません)
次に、今日(2012-12-19)に有効なエントリを確認します。論理的な観点からは、エントリ3である必要があります。これは、エントリが互いに重複する可能性がありますが、1日に有効なエントリは1つだけであるためです。(2012-12-22では、有効なエントリ2である必要があります。)
すべてのエントリにvalid_untilを含めることができますが、valid_untilがNULLであるエントリは複数存在できないことに注意してください。
SQLクエリでこれをどのように実行しますか?(SQLAlchemyで可能であれば、生のSQLから自分で翻訳することもできます)
(私はPostgreSQL 9.1を使用しています)
編集:ここに私の最終的な解決策があります。すべての貢献者に感謝します!
SELECT *
FROM validity_period
WHERE valid_from <= CURRENT_DATE AND
valid_until >= CURRENT_DATE
UNION
SELECT *
FROM validity_period
WHERE valid_from <= CURRENT_DATE AND
valid_until IS NULL
ORDER BY valid_from DESC
LIMIT 1;