Bill Karwin对问题121387的回答对我来说非常有用..
“我看到许多人使用子查询或特定于供应商的功能来执行此操作,但我经常以下列方式执行此类查询而不使用子查询。它使用普通的标准SQL,因此它应该适用于任何品牌的RDBMS
SELECT t1.*
FROM mytable AS t1
LEFT OUTER JOIN mytable AS t2
ON (t1.UserId = t2.UserId AND t1."Date" < t2."Date")
WHERE t2.UserId IS NULL;
换句话说:从t1获取行,其中不存在具有相同UserId和更大日期的其他行。“
但是,我还需要在结果中包含第三个表中的列(想象另一个具有UserId和UserPhoneNumber列的表)。感觉好像它应该是直截了当但它让我疯了。任何帮助将不胜感激。
答案 0 :(得分:0)
只需在LEFT JOIN之后加入第三个表格:
SELECT t1.*, t3.*
FROM mytable AS t1
LEFT OUTER JOIN mytable AS t2
ON (t1.UserId = t2.UserId AND t1."Date" < t2."Date")
JOIN myothertable AS t3 ON t1.UserId = t3.UserId
WHERE t2.UserId IS NULL;