mysql - 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
解决方案
由于每个文件名可以在 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 中解决。
推荐阅读
- python - pandas.io.sql.DatabaseError:在 sql 上执行失败
- javascript - 如何将两个数组作为键和值合并到一个具有多个值的键的对象中?
- python - Plotly hover_data 不适用于 dict?
- razor - 如何在 Razor Dotnet 核心项目的子文件夹中运行 Blazor 应用程序项目?
- api - 如何使用推送通知和 API 制作反应原生应用程序
- r - 如何在 R 中编写一个函数来复制多个列,每次添加不同的后缀?
- java - 在同一按钮上使用动作侦听器时出现摆动错误
- python - 如何获取 boost.python 教程示例以链接 Python3:Raspberry Pi3 / boost 1.72 (linux)
- android - 什么是 Android 中的高程叠加
- flutter - 如何添加要在收藏夹页面上显示的项目?