1. ホーム
  2. mysql

mysql で ORDER BY date and time BEFORE GROUP BY name を使用する。

2023-12-11 15:57:29

質問

私はこのようなテーブルを持っています。

name    date         time
tom | 2011-07-04 | 01:09:52
tom | 2011-07-04 | 01:09:52
mad | 2011-07-04 | 02:10:53
mad | 2009-06-03 | 00:01:01

古い名前から順に表示したい。

SELECT * 
ORDER BY date ASC, time ASC 
GROUP BY name

(->は効きません!)

これで、最初のmad(日付が古い)が表示され、次にtomが表示されるはずです。

しかし GROUP BY name ORDER BY date ASC, time ASC では、ソートする前にグループ化してしまうので、 新しい方の mad を先に与えてしまいます。

GROUP BYはORDER BYの前になければならないので、問題はグループ化する前に日付と時刻でソートすることができないことです!

どのように解決するには?

別の方法です。

SELECT * 
FROM (
    SELECT * FROM table_name
    ORDER BY date ASC, time ASC 
) AS sub
GROUP BY name

GROUP BY は、最初にヒットしたマッチする結果をグループ化します。その最初のマッチングがたまたま望むものであれば、すべてが期待通りに動作するはずです。

私はこの方法を好みます。サブクエリが論理的に意味をなすので、他の条件をちりばめるよりもいいのです。