私のSQLクエリでは、GROUP BYおよびORDER BY句を使用してデータを選択しています。テーブルには、各行の時間が異なる複数の行にわたって同じnumbers
があります。ですから、GROUP BY句を適用したいと思います。
ただし、結果では数値とともに最も古い時間を返しますが、最新の時間が必要です。
SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC
クエリは、最初にGROUP BYを適用し、次にORDER BY ...を適用する必要があるかのように見えますが、結果はこのように機能していないようです。
これを修正する方法はありますか?
回避策は、クエリを次のように書き直すことです。
SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers;
SELECT *
FROM table t
WHERE time = (
SELECT max(time)
FROM table
WHERE t.numbers = numbers
)
SELECT * FROM table
WHERE time IN (
SELECT MAX(time)
FROM table
GROUP BY numbers
)
マニュアルによると、descをグループごとのリストに追加できます:例:
group by item1、item2 desc、item3
ロールアップの有無にかかわらず。
私はこれを試してみましたが、Ubuntuバージョン5.5.58で動作します。参照ページは次のとおりです: https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html