1

良い一日。

注: MySQL 5.7.0 以降では、デフォルトで ONLY_FULL_GROUP_BY sql_mode に含まれています。

次のクエリはそうではありません。

SELECT
    `ordered_list`.*
FROM
    (
        SELECT
            *
        FROM
            `test`
        ORDER BY
            `test`.`datetime` DESC
    ) `ordered_list`
GROUP BY
    `ordered_list`.`parent_id`

エラー メッセージ Error: Expression # 1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ordered_list.id' which is not functionlydependent to columns in GROUP BY clause; これは、予想される sql_mode = only_full_group_by と互換性がありません。

このオプションを無効にすると、次の結果が得られます。

Id  parent_id   datetime                field1          field2
1   1           2016-04-12 13:01:15     value 1-1-1     value 1-1-2
4   2           2016-04-26 13:08:31     value 2-4-1     value 2-4-2

5.7.x より前の MySQL バージョンでは、望ましい結果が返されます。

Id  parent_id   datetime                field1          field2
4   2           2016-04-26 13:08:31     value 2-4-1     value 2-4-2
2   1           2016-04-19 13:02:03     value 1-2-1     value 1-2-2

ソースデータ:

Id  parent_id   datetime                field1          field2
1   1           2016-04-12 13:01:15     value 1-1-1     value 1-1-2
2   1           2016-04-19 13:02:03     value 1-2-1     value 1-2-2
3   1           2016-04-05 13:07:54     value 1-3-1     value 1-3-2
4   2           2016-04-26 13:08:31     value 2-4-1     value 2-4-2
5   2           2016-04-19 13:09:24     value 2-5-1     value 2-5-2
6   2           2016-04-20 13:12:46     value 2-6-1     value 2-6-2

各グループの最大日付に該当するデータを行を選択するクエリを見てください。

4

0 に答える 0