見出し画像

【SQL】日時情報カラム同士を比較して、新しい方の日時を取得する【IF関数】

¡Hola!マイコです。
先日初めてSQLクエリでIF関数を使ってみました。
今後も活用できる場面が多々ありそうな関数だったので、noteに残します。

やりたいこと

ユーザのアクティブ状況を調べるため、ユーザごとの最終返信日時を取得したい。
ただし、返信には受諾(answered_at)と辞退(declined_at)があり、受諾日時と辞退日時は別カラムになっている。
受諾の場合は辞退日時カラムはNULL、辞退の場合は受諾日時カラムはNULLになる。

お困りポイント

受諾・辞退どちらも回答時間を同一カラムに格納していれば、そのMAXをとるだけなので簡単だった。
しかし、今回は二つのカラムにまたがって日時を比較する必要がある。

解決策

IF関数を使います。基本的な使い方は次の通りです。

IF(条件,真の時に返す値,偽の時に返す値)

作成したクエリ

declined_atの最大値がanswered_atの最大値より大きいときは、declined_atの最大値を、そうでない場合はanswered_atの最大値を表示するようにします。

SELECT
        user_id
        , IF (max(answered_at) < max(declined_at), max(declined_at), max(answered_at)) as last_replied_time
FROM users

意外とシンプルに解決できました!

どうやってやろうか、なんで別々のカラムにしたんだ、とむぅむぅ言っていた私。
社内のエンジニアさんにぽろっと相談したら「IFでいけるんじゃないですか?」と即答いただきました。
相談できる人がいるって本当にありがたいですね。

この記事が気に入ったらサポートをしてみませんか?