从2个连接表中的不同列中分组的列中选择最大值
我有一个复杂的问题,并且我对MYSQL不太了解。我希望有人能帮助我。
我有2个表格。这些表的一个片段:从2个连接表中的不同列中分组的列中选择最大值
- Members_per_year
ID | Member_ID | Business_year_ID | AS_ID
1 ........... 1 ............................ 56 ..... .............. 12
10004 ... 1 ............................ 55 ................... 12
10005 ... 1 ............................ ...... 54 ................... 11
10002 ... 1 ................ ............ 57 ................... 30
2 ........... 2 .. ........................... 58 ................... 40
3 ........... 3 ............................ 58 ......... .......... 27
- 年份
ID | Business_year
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
,并返回:
Member_ID | Business_year_ID | MAX(Year.Business_year)| YearID | 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与实际较高的商业年度不相等。
你需要一个子查询来获得每个成员最大的一年,然后再加入与原表中的结果:
select b.*, c.*
from (
select Member_ID, max(Business_year_ID) y
from Members_per_year
group by Member_ID) a
join Members_per_year b on a.Member_ID = b.Member_ID and a.y = b.Business_year_ID
join Year c on b.Business_year_ID = c.ID;
返回的值在SELECT列表中的非集合表达式是不确定的,如果这些表达式AREN不包含在“GROUP BY”子句中。如果我们在sql_mode中包含'ONLY_FULL_GROUP_BY',我们可以让MySQL抛出一个错误(类似于其他RDBMS的行为)。为'YearID'列返回的值来自组中的* some *行。这不一定来自具有“BusinessYear”最大值的行)。此处记录的行为:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html – spencer7593
@ spencer7593是,我认为类似的事情正在发生。它仅仅挑选最大值而不是对应于最大值的行有点烦人。 – Barna