GROUPY中的MYSQL最后一个条目,从m到n JOIN

时间:2017-02-21 19:44:38

标签: mysql join group-by

嗨伙计们, 阅读约20个问题,但我仍有问题 因为它看起来各不相同,或者我看不出什么解决方案 正在解决我的问题。

我想写信给我的所有客户,他们每年都会搬到另一个公寓 我做了一个表用户和一个表地址和一个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

谢谢。

1 个答案:

答案 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