首页 > 解决方案 > MySQL - 你如何重写它以使用 ONLY_FULL_GROUP_BY

问题描述

你如何重写这个 MySQL 查询以使用 ONLY_FULL_GROUP_BY

SELECT filename FROM documentdb GROUP BY filename ORDER BY timestamp DESC LIMIT 10

包含多个列的表在哪里,documentdb包括timestamp...filename

标签: mysql

解决方案


由于每个文件名可以在 documentdb 中出现多次,因此您需要决定要按哪个时间戳对它们进行排序。

例如,您可以这样做:

select filename
from documentdb
group by filename
order by max(timestamp) desc
limit 10

或者

select filename
from documentdb
group by filename
order by min(timestamp) desc
limit 10

原始查询对于要比较的给定文件名的时间戳不明确。

有趣的是,mariadb 的 only_full_group_by 实现并不反对原始查询,至少在 10.5 中;这似乎是一个错误,根据https://jira.mariadb.org/browse/MDEV-24239应该在 10.6 中解决。

小提琴


推荐阅读