4

MySQL データベースの他のすべてのエントリを無視して、シリアルごとに最新のエントリを選択しようとしています。私が現在使用しているSQLコマンドは次のとおりです。

SELECT *,MAX(date) FROM `gps-log` GROUP BY serial DESC

これは、シリアル (完全) ごとに 1 つのエントリのみを返しますが、以下のサンプルのように、最新ではなく最初のエントリを取得しています。正しい最大日付が識別されますが、そのレコードは何らかの理由で取得されません。

pos                       elev    serial      date                  MAX(date)
-33.8710138,151.1924356   54.0m   SDGH23465   2012-09-26 17:01:59   2012-09-27 12:14:23
-33.8707848,151.1925109   54.0m   SDGH29648   2012-09-27 12:14:30   2012-09-27 12:21:41

クエリに DESC を追加しようとしましたが、実際にフェッチされた行ではなく、(予想どおり) 出力が再配置されただけです。私はさまざまな質問をたくさん見てきましたが、ほとんどの場合、複数のテーブルを扱っているか、日付などのより複雑なものでグループ化しており、このクエリを正しく機能させることができないようです。

ここでは、正しいシーケンスを取得する方法をクエリに伝える何かが明らかに欠けているので、どんな助けも大歓迎です!

4

1 に答える 1

3

これを試して、

SELECT  a.*
FROM    `gps-log` a
        INNER JOIN
        (
            SELECT serial, MAX(`date`) maxDate
            FROM `gps-log`
            GROUP BY serial
        ) b ON a.serial = b.serial AND
                a.`date` = b.maxDate
于 2012-09-27T03:22:55.283 に答える