• ベストアンサー

条件式の書き方を教えてください。

unique | day_start | day_end --------+----------------------------+---------------------------- 1 | 2006-06-02 12:49:07.094831 | 2007-01-17 02:00:58.643778 2 | 2006-06-08 12:49:07.122762 | 2007-01-17 02:00:58.647793 3 | 2006-06-08 12:49:07.137901 | 2007-01-17 02:00:58.65177 4 | 2006-06-04 12:49:07.15393 | 2007-01-17 02:00:58.655763 5 | 2006-06-08 12:49:07.181952 | 2007-01-17 02:00:58.65976 6 | 2006-06-08 12:49:07.181952 | 7 | 2006-06-08 12:49:07.181952 | 2007-01-17 02:00:58.65976 上記のようなデータがあるとします。 day_startとday_endの間の日数の平均が知りたいです。 ただし、uniqueが7のレコードのように、 day_endがNULLのレコードもあり、その場合は、そのレコードの日数はday_startから現在日までとしたいです。 select avg(to_date(day_start,'yyyy/mm/dd') - to_date(day_end,'yyyy/mm/dd')) from a ※day_endがNULLのレコードもあり、その場合は、そのレコードの日数はday_startから現在日までとしたいです。 ↑この部分の条件式の書き方が分りません。 ご教示いただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

select avg( case when day_end is null then current_date else to_date(day_end,'yyyy/mm/dd') end - to_date(day_start,'yyyy/mm/dd') ) from a では

myaa_myu
質問者

お礼

ご回答ありがとうございました! できました! SQL文でもCASE文が使えるのですね。。。初めて知りました! ありがとうございました!

その他の回答 (1)

回答No.2

current_dateとcoalesce関数を使えば、容易に書けます。

myaa_myu
質問者

お礼

ご回答ありがとうございます! ご教示いただいたものでSQL文を作成してみましたところ、 select avg(to_date(coalesce(day_start,current_date),'yyyy/mm/dd') - to_date(day_end,'yyyy/mm/dd')) from a で、できました! coalesceというのを初めて知りまして大変勉強になりました。 ありがとうございました!

関連するQ&A