sql >> データベース >  >> RDS >> Mysql

行を混合するMySQLMax関数

    GROUP BYが必要です 集約されたMAX()を含む句 。 MySQLでは、これを省略できますが(他のRDBMSがエラーを報告する場合)、結果が不確定になります。これは、グループ化されたrevを返すサブクエリに対して結合することで処理できます。 idごと 。

    SELECT 
      r.id,
      r.state,
      maxrev.rev
    FROM
      VIEW_data r
      /* INNER JOIN against subquery which returns MAX(rev) per id only */
      JOIN (
        SELECT id, MAX(rev) AS rev
        FROM VIEW_data GROUP BY id
      /* JOIN is on both id and rev to pull the correct value for state */
      ) maxrev  ON r.id = maxrev.id AND r.rev = maxrev.rev
    WHERE r.id = 1
    

    http://sqlfiddle.com/#!2/4f651/8

    上記は最大revを返します idの値 。 特定の場合 WHEREでフィルタリングされた1行のみが必要です MAX()ではなく句 グループごとに、ORDER BYを使用する他の回答を見てください &LIMIT



    1. MariaDBでのSUBSTRING()のしくみ

    2. 一般的にどの列が適切なインデックスになりますか?

    3. 構造が異なる別のテーブルにテーブルをコピーします

    4. SQL:各グループのN番目のアイテムを取得します