2014-01-08 78 views
1

我有很多重複的作業ID,但入境日期不能重複。我需要根據上次登錄日期獲取始終唯一的工作ID。我已經解決了它與下面的查詢,但想知道是否有更好的方式來形成相同的SQL時,數據將是巨大的最佳性能。請指導我謝謝。如何提取基於entrydate sql server的最後記錄

SELECT A.JID,A.EntryDate,RefundDate,Comments,Refund, ActionBy 
FROM (
      (
      select JID, Max(EntryDate) AS EntryDate 
      from refundrequested 
      GROUP BY JID 
      ) A 
      Inner JOIN 
      (
        SELECT JID,ENTRYDATE,refundDate,Comments,refund,ActionBy 
        from refundrequested 
      ) B 
      ON A.JID=B.JID AND A.EntryDate = B.EntryDate 
     ) 

回答

2

使用row_number()功能通常是快了一點:

select * 
from (
     select row_number() over (partition by jid 
            order by EntryDate desc) as rn 
     ,  * 
     from refundrequested 
     ) as SubQueryAlias 
where rn = 1 
0

查詢:

SELECT t1.JID, 
     t1.EntryDate, 
     t1.RefundDate, 
     t1.Comments, 
     t1.Refund, 
     t1.ActionBy 
FROM refundrequested t1 
LEFT JOIN refundrequested t2 
    ON t2.JID = t1.JID 
    AND t2.EntryDate > t1.EntryDate 
WHERE t2.JID is null 
+0

這將是在性能上的區別,如果u使用LEFT JOIN的內isntead加入?請解釋。感謝 – Thomas

+0

與內部聯接,你不會在第二個表中得到空...在這個查詢中,我比較如果在t2表中的行數大於第一個表中的行,所以基本上我正在尋找最大的entrydate,然後第二個表會沒有記錄,這意味着在第一個表中有最大的入口日期... – Justin