我有这样的数据结构:
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/