コンテンツへスキップ

【MySQL】order by greatest()で複数カラムの日付を使った並び替えを行う

  • 未分類

今日はMySQLのorder by句で利用できるgreatest()を紹介します。
というのも、最近仕事でプログラミングをしている際に実際に使うケースがあったので新鮮なうちに自分の理解を深める目的でもブログとしてまとめておきたいと思います。

greatest()とは

MySQLの比較演算子の一つであるgreatest()は、以下のように使います。

greatest(A, B)

引数として渡したAとBの値を比較し、大きい方を返す挙動をしてくれます。

実際にgreatest()を使ったシーン

実際のプログラムの中でどのようにこのgreatest()を使ったかというと、「登録日」と「編集日」の2つのカラムを同時に比較し、最新順に並び替えるような場面です。

ユーザ情報を格納した上記のようなusersテーブルがあり、このテーブルデータを並び替える際に「登録日(regist_date)」と「編集日(edit_date)」を合わせて最新順に並び替える必要がありました。

求める並び替え後の順番は上記の通りです。

order by greatest()で並び替え

select * from users order by greatest(regist_date, edit_date) desc;

結論として、上記のSQLにより今回求めている並び順が実現できます。

order by greatest(regist_date, edit_date)

この記述により各行のregist_dateカラムとedit_dateカラムの大きい方を取得してくれます。そしてそれらの値をdesc(降順)することで「登録日」と「編集日」の2カラムを合わせた状態で並び順のコントロールができるようになりました。

まとめ

今回はMySQLの比較演算子の一つであるgreatest()の使い方と実際にどういうケースで使ったかを紹介させていただきました。

greatest()は引数に渡した値の大きい方を返す役割を果たしますが、反対に小さい値を返すleast()も存在します。

普段の使用頻度はそこまで多くありませんが、忘れたころに使う場面がやってくるような気がします。

他にも使用頻度は多くないけれども、覚えておいて損はない比較演算子がいくつかありますので、もしよかったら以下の参考ページをご確認してみてはいかがでしょうか。

参考ページ:MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.3.2 比較関数と演算子