2013-05-20 120 views
0

我很抱歉,这个问题已经被问过的净很多次,但我不明白如何优化我的子查询:减少子查询加盟

SELECT * 
FROM rp_clientAffectationHistory as T1 
WHERE rp_clientAffectationHistoryID in (SELECT MAX(rp_clientAffectationHistoryID) 
     FROM rp_clientAffectationHistory as T2 
GROUP BY `rp_clientID`) 
AND `rp_userID` = 57 

我有许多重复的条目相同的“rp_clientID”,我只想要最新的rp_clientAffectationHistoryID记录。

非常感谢

+0

此查询有什么错误? – TechDo

回答

1

你需要的是这样的:

SELECT * 
    FROM Rp_Clientaffectationhistory AS T1 
left join Rp_Clientaffectationhistory as T2 on (T1.Rp_Clientid = T2.Rp_Clientid) and T1.Rp_Clientaffectationhistoryid < T2.Rp_Clientaffectationhistoryid 
where T2.Rp_Clientaffectationhistoryid is null 
and T1.Rp_Userid = 57 

帮助?

+0

也可以看到 http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max-value-for-a-column ?RQ = 1 – wraith

0

我猜你想只有一个,每rp_clientID入门 -

你错过的一件事是检查rp_clientID内查询中 -

SELECT * 
    FROM Rp_Clientaffectationhistory AS T1 
WHERE Rp_Clientaffectationhistoryid IN 
     (SELECT MAX(Rp_Clientaffectationhistoryid) 
      FROM Rp_Clientaffectationhistory AS T2 
     WHERE T1.Rp_Clientid = T2.Rp_Clientid 
     GROUP BY Rp_Clientid) 
    AND Rp_Userid = 57 

是你在找什么?

+0

那么,我的查询工作正常。我只想通过JOIN替换我的子查询:) – IsraGab

0

对于SQL Server,请尝试:

SELECT * FROM(
    SELECT *, ROW_NUMBER() over (partition by rp_userID order by rp_clientAffectationHistoryID desc) Rnum 
    FROM rp_clientAffectationHistory 
    WHERE rp_userID = 57 
)x 
WHERE Rnum=1