MySQLで作成日と更新日の新しい方を使ってソートしたい

MySQLの作成日と更新日で新しい方を先に出したいときってあるじゃないですか。 そんなときはGREATEST。

SELECT * FROM `table` ORDER BY GREATEST(`created_at`, `updated_at`) DESC

+---------------------+---------------------+
| created_at          | updated_at          |
+---------------------+---------------------+
| 2018-08-21 19:22:55 | 2018-08-27 16:10:54 |
| 2018-08-27 12:06:44 | 2018-08-27 12:22:47 |
| 2018-08-20 17:24:34 | 2018-08-26 19:23:22 |
| 2018-08-21 15:52:43 | 2018-08-21 16:38:08 |
| 2018-08-26 13:08:17 | NULL                |
+---------------------+---------------------+

でも更新日のカラムってNULLってこともあるじゃないですか。そういう時は作成日を使いたいですよね。 なので修正。

SELECT * FROM `table` ORDER BY GREATEST(`created_at`, IFNULL(`updated_at`, `created_at`)) DESC

+---------------------+---------------------+
| created_at          | updated_at          |
+---------------------+---------------------+
| 2018-08-21 19:22:55 | 2018-08-27 16:10:54 |
| 2018-08-27 12:06:44 | 2018-08-27 12:22:47 |
| 2018-08-20 17:24:34 | 2018-08-26 19:23:22 |
| 2018-08-26 13:08:17 | NULL                |
| 2018-08-21 15:52:43 | 2018-08-21 16:38:08 |
+---------------------+---------------------+

いいかんじ。