任务是为每个s_stunde
获取s_tag
的最大值。很容易:
SELECT s_tag, max(s_stunde) AS letzte_stunde
FROM tstundenplan
GROUP BY s_tag;
工作得很好。
+-------+---------------+
| s_tag | letzte_stunde |
+-------+---------------+
| 1 | 16 |
| 2 | 16 |
| 3 | 16 |
| 4 | 16 |
| 5 | 16 |
| 6 | 7 |
+-------+---------------+
但我希望从聚合letzte_stunde
字段的行中获取其他列。禁用ONLY_FULL_GROUP_BY
后,我的结果如下所示:
+-------+----------+----------+---------------+
| s_tag | s_lehrer | s_klasse | letzte_stunde |
+-------+----------+----------+---------------+
| 1 | FM | 4AHIF | 16 |
| 2 | PUH | 2BHIF | 16 |
| 3 | PUH | 2BHIF | 16 |
| 4 | NAI | 5AHIF | 16 |
| 5 | PUH | 2BHIF | 16 |
| 6 | AT | 1AHKUI | 7 |
+-------+----------+----------+---------------+
我确实看到了ONLY_FULL_GROUP_BY
修复的逻辑问题(因为可能有多个列与聚合值相匹配),但是实现相同的最佳方法是什么启用规则的结果?
现在我知道我可以使用any_value
明确地告诉它使用任何匹配的值(在我的情况下只能是一个),但它有点像黑客。
您可能会说这是How to make group by work by specifying a single column name in GROUP BY with ONLY_FULL_GROUP_BY enabled的副本,但是在主键上处理了聚合,这不是这里的情况。
SQL Select only rows with Max Value on a Column无法解答我的问题,因为它没有处理ONLY_FULL_GROUP_BY
。
我希望尽快得到答案 - 谢谢!