我想写信给我的所有客户,他们每年都会搬到另一个公寓 我做了一个表用户和一个表地址和一个mton加入他们。 但是当用户有2个地址时,我总是得到第一个地址和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仍然住在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
请帮助我,他想搬到她的位置,他爱她如此mutch
预期结果:
myemail heraddress 2017-01-01
heremail heraddress 2016-01-01
:)< 3
谢谢。
答案 0 :(得分:1)
尝试这样:
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