SELECT * FROM A
JOIN B
ON B.ID = A.ID
AND B.Time =   (SELECT max(Time)
                            FROM B B2
                            WHERE B2.ID = B.ID)

我正在尝试在MYSQL中加入这两个表。如果ID是唯一的,请不要注意,那么我就不会尝试这样做。我浓缩了绘制简化图片的真正解决方案。我正在尝试在特定日期的最大日期获取并加入表B。此过程正在由SSIS程序包运行,并说B2.ID是未知列。我经常在MSSQL中做这样的事情,并且是MYSQL的新手。任何人有任何指示或想法吗?

最佳答案

我以不同的方式执行此类型的查询,使用排除联接而不是子查询。您想查找B的行,这些行具有给定ID的最长时间;换句话说,没有其他行具有更大的时间和相同的ID。

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL

您还可以使用派生表,该表应比使用相关子查询更好。
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
  ON (B.ID, B.Time) = (B2.ID, B2.Time)

附注:我添加了greatest-n-per-group标签。每周都会在Stack Overflow上出现这种类型的SQL问题,因此您可以按照该标签查看许多类似的问题及其答案。

关于mysql - MYSQL联接中的嵌套Select语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7194547/

10-12 22:42
查看更多