【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でいけるんじゃないですか?」と即答いただきました。
相談できる人がいるって本当にありがたいですね。
この記事が気に入ったらサポートをしてみませんか?