繁体   English   中英

MYSQL在GROUP BY中从m到n加入的最后一个条目

[英]MYSQL Last Entry in a GROUP BY from m to n JOIN

大家好,读了大约20个问题,但我仍然有一个问题,因为它看起来各不相同,或者我根本看不出解决该问题的解决方案。

我想写信给我所有的客户,他们每年都搬到另外一个单位,我做了一个表用户,一个表地址和一个mton来加入他们。 但是,当一个用户有2个地址时,如果不加group by的加入,我总是得到第一个地址为group by的地址,或者两个地址都为。

有人可以告诉我答案吗,我敢打赌我已经有解决方案了

我表的快捷方式

CREATE DATABASE DL;

CREATE TABLE DL.users (
  uidx int PRIMARY KEY auto_increment,
  email varchar(255) 
);
INSERT INTO DL.users VALUES (NULL,'myemail'),(NULL,'heremail');
CREATE TABLE DL.address (
  aidx int PRIMARY KEY auto_increment,
  address varchar(255) 
);
INSERT INTO DL.address VALUES (NULL,'myadress'),(NULL,'heraddress');
CREATE TABLE DL.ntom (
  nidx int PRIMARY KEY auto_increment,
  fk_uidx int ,
  fk_aidx int ,
  movein date
);
INSERT INTO DL.ntom VALUES (NULL,1,1,'2016-01-01'),(NULL,2,2,'2016-01-01'),(NULL,1,2,'2017-01-01');

现在它给了我

SELECT email,address,movein FROM DL.users 
JOIN DL.ntom ON uidx = fk_uidx
JOIN DL.address ON aidx = fk_aidx

myemail    myadress     2016-01-01
heremail   heraddress   2016-01-01
myemail    heraddress   2017-01-01

当我按myemail分组并按order排序时,myemail仍然居住在myadress而不是heraddress上

SELECT email,address,movein FROM DL.users 
JOIN DL.ntom ON uidx = fk_uidx
JOIN DL.address ON aidx = fk_aidx
GROUP BY DL.users.email ORDER BY DL.ntom.movein desc

myemail    myadress     2016-01-01
heremail   heraddress   2016-01-01

请帮我,他想搬到她的地方,他爱她如此慈悲。

预期结果 :

myemail    heraddress   2017-01-01
heremail   heraddress   2016-01-01

:) <3

谢谢 。

尝试这样:

SELECT email,address,movein FROM DL.users u 
JOIN (SELECT fk_uidx,max(movein) as maxmovein from DL.ntom group by fk_uidx) as t ON u.uidx = t.fk_uidx
JOIN DL.ntom t2 on t2.fk_uidx=t.fk_uidx and t2.movein=t.maxmovein
JOIN DL.address a ON a.aidx = fk_aidx
ORDER BY t2.movein desc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM