[英]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.