MySql 访问冲突不在 YEAR MONTH 和 MAX 组中

标签 mysql sql

我有这样的数据结构:

Table One
______________
| id  | name |
|------------|
| 1   | bob  |
| 2   | jane |
--------------

Table Two
_________________________________
| id  | table_1_id | date       |
|-------------------------------|
| 1   | 1          | 2000-01-01 |
| 2   | 1          | 2000-01-31 |
| 4   | 1          | 2000-02-28 |
| 5   | 1          | 2000-03-03 |
| 6   | 2          | 2000-01-03 |
| 7   | 2          | 2000-01-05 |
---------------------------------

我试图只返回表 2 中与表 1 中用户 bob 的 ID 匹配的最高(最近)日期。

例如,在上面的例子中,我想从我的查询中返回这个

2000-01-31

2000-02-28

2000-03-03

现在尝试的是

SELECT MAX(date)
FROM table_2
INNER JOIN table_1 ON table_1.id = table_2.table_1_id
WHERE table_1.name = "bob"
GROUP BY YEAR(date), MONTH(date)
ORDER BY date DESC

这似乎在本地对我有用,但在生产中它失败了,因为启用了 ONLY_FULL_GROUP_BY。

我不想禁用 ONLY_FULL_GROUP_BY,因为我宁愿学习构建此查询的正确方法,但我似乎无法找到如何在不获取“isn”的情况下正确处理 YEAR/MONTH 和 MAX t in GROUP BY”错误。

如有任何帮助,我们将不胜感激!

最佳答案

ORDER BY 应该在聚合表达式或 GROUP BY 中定义的表达式上。

所以我们需要按最大日期(您选择的值)而不是日期排序。在MySQL中,我们可以定义一个别名,并在ORDER BY子句中使用别名

SELECT MAX(date) as max_date
FROM table_2
INNER JOIN table_1 ON table_1.id = table_2.table_1_id
WHERE table_1.name = 'bob'
GROUP BY YEAR(date), MONTH(date)
ORDER BY max_date DESC

也不要使用双引号,而是对字符串文字使用标准的单引号

关于MySql 访问冲突不在 YEAR MONTH 和 MAX 组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53492590/

相关文章:

php - 改进查询运行时间(加载页面需要 20 秒以上)

php - 遍历数据库查询

mysql - 查询中有什么问题

php - Mysql 日期时间的交集

mysql - 程序不起作用

mysql - MySQL修剪或使用子字符串定位获取特定的字符串集

mysql - 如何在mysql中选择具有NULL值的列表 'IN'的所有行?

php - select * from table 其中名称如 %O%

mysql - super 复杂的SQL语句...可能不可能

c# - 更新语句以跟踪数据库中的 SortOrder