【问题标题】:Reduce subquery to join减少子查询加入
【发布时间】:2013-05-20 07:35:48
【问题描述】:

我不明白如何优化我的子查询:

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 的记录。

【问题讨论】:

  • 这个查询有什么错误?

标签: sql join subquery


【解决方案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

有帮助吗?

【讨论】:

【解决方案2】:

我猜你只想为每个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

是你要找的吗?

【讨论】:

  • 嗯,我的查询工作正常。我只想用 JOIN 替换我的子查询 :)
【解决方案3】:

对于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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多