【发布时间】:2017-09-19 18:55:33
【问题描述】:
我有一个复杂的问题,我不太擅长 MYSQL。我希望有人可以帮助我。
我有 2 张桌子。这些表的 sn-p:
- Members_per_year
ID |会员ID | Business_year_ID | AS_ID
1……………………………………56…………………………………………………………………………………………………………………………56 ............12
10004....1..................................55........ ...12
10005....1..................................54........ ...11
10002....1..................................57 ...30
2……………………………………58…………………………………………………………………………………………………………58 .........40
3…………………………………………58…………………………………………………………………………………………………………………………………………………………58 ............27
- 年份
ID |业务年
54......2012-2013
55......2013-2014
56......2014-2015
57......2015-2016
58......2016-2017
我想要做的是合并 Members_per_year 上的两个表。 Business_year_ID 和 Year.ID 列。之后,我想按 Member_ID 对数据进行分组,所以我得到每个成员 1 行。问题是它应该是该成员具有最大 Business_year 的数据。我设法整理了一个查询,但它无法正常工作。查询是:
SELECT Member_ID, Business_year_ID, MAX(Year.Business_year), Year.ID AS YearID, AS_ID
FROM Members_per_year
INNER JOIN Year ON Members_per_year.Business_year_ID = Year.ID
GROUP BY Member_ID
然后它返回:
会员ID | Business_year_ID | MAX(年.Business_year) |年份ID | AS_ID
1..................................56.................. ..........2015-2016..................56........12
2..................................58.................. ..........2016-2017..................................58........40
3..................................58....................... ..........2016-2017..................58........27
它返回正确的最大 Business_year,但关联的 Business_year_ID 和 YearID 不正确。基本上,它为 Business_year_ID 选择第一个值,为 Business_year 选择 MAX。不是 MAX(Business_year) 对应的 Business_year_ID。有人知道为什么会发生这种情况以及如何解决吗?
编辑:
我故意搜索 Business_year 而不是 Business_year_ID。这是一个预防措施,以防较高的 ID 与实际较高的营业年度不相等。
【问题讨论】:
-
如果这些表达式未包含在
GROUP BY子句中,则 SELECT 列表中的非聚合表达式返回的值是不确定的。如果我们在 sql_mode 中包含ONLY_FULL_GROUP_BY,我们可以让 MySQL 抛出错误(类似于其他 RDBMS 的行为)。YearID列的返回值来自组中的 some 行。它不一定来自最大值为BusinessYear的行。)此处记录的行为:dev.mysql.com/doc/refman/5.7/en/group-by-handling.html -
@spencer7593 是的,我认为类似的事情正在发生。它只选择最大值,而不是与最大值对应的行,这有点烦人。
标签: mysql greatest-n-per-group