0

我在SQL Server 2008中的工作,我使用下面的查詢檢索記錄,查詢選擇最新更新的記錄

SELECT 
    Var_AssoId, Var_Geo, 
    Var_Vertical, Var_AccountID,    
    Dt_VisaValidFrom, Dt_VisaValidTill, 
    Var_Grade, Var_ProjectID, Bit_SupervisorResponse, 
    a.Int_CommentID, Var_CommentsEntered,Dt_Date, 
    Bit_MailUploadStatus, Var_MailUploadPath, 
    a.Dt_UpdatedOn, Var_UpdatedBy, b.Var_SupervisorComments 
FROM 
    Testingpmo_Travelready_SupervisorInput a 
INNER JOIN 
    Testingpmo_Travelready_SupervisorComments b ON a.Int_CommentID = b.Int_CommentID 
ORDER BY 
    a.Dt_UpdatedOn 

以下是本次查詢的輸出,

Var_AssoId Int_CommentID   Dt_UpdatedOn 
251922  2  9/25/13 5:22 PM 
305561  2  9/25/13 5:24 PM 
109483  1  9/25/13 5:24 PM 
305561  4  9/25/13 6:09 PM 
109483  3  10/1/13 12:44 PM  
109483  3  10/1/13 12:47 PM  
109483  3  10/1/13 12:48 PM  
109483  3  10/1/13 12:51 PM  
109483  3  10/1/13 2:23 PM 

我想在每個Var_AssoId中只獲得一個最新更新記錄。

例如查詢的輸出應該是這樣的,

Var_AssoId Int_CommentID Dt_UpdatedOn  
251922  2  9/25/13 5:22 PM 
305561  4  9/25/13 6:09 PM 
109483  3  10/1/13 2:23 PM 

得到這個輸出什麼,我需要在查詢中添加?

回答

0

假設你的表結構爲:

create table Testingpmo_Travelready_SupervisorInput(Var_AssoId int, 
     Var_Geo int, 
     Var_Vertical int, 
     Var_AccountID int,    
     Dt_VisaValidFrom datetime, 
     Dt_VisaValidTill datetime, 
     Var_Grade char(1), 
     Var_ProjectID int, 
     Bit_SupervisorResponse bit, 
     Int_CommentID int, 
     Var_CommentsEntered varchar(10), 
     Dt_Date datetime, 
     Bit_MailUploadStatus bit, 
     Var_MailUploadPath varchar(10), 
     Dt_UpdatedOn datetime, 
     Var_UpdatedBy varchar(10)); 

create table Testingpmo_Travelready_SupervisorComments(Var_SupervisorComments varchar(10),Int_CommentID int) 

你可以編寫一個查詢爲:

SELECT a.Var_AssoId, 
Var_Geo, 
Var_Vertical, 
Var_AccountID,    
Dt_VisaValidFrom, 
Dt_VisaValidTill, 
Var_Grade, 
Var_ProjectID, 
Bit_SupervisorResponse, 
a.Int_CommentID, 
Var_CommentsEntered, 
Dt_Date, 
Bit_MailUploadStatus, 
Var_MailUploadPath, 
a.Dt_UpdatedOn 
Var_UpdatedBy, 
b.Var_SupervisorComments    
FROM Testingpmo_Travelready_SupervisorInput a 
inner join Testingpmo_Travelready_SupervisorComments b 
on a.Int_CommentID=b.Int_CommentID 
inner join 
(select t1.Var_AssoId,MAX(t1.Dt_UpdatedOn) as Dt_UpdatedOn 
FROM Testingpmo_Travelready_SupervisorInput T1 
group by t1.Var_AssoId) T on a.Var_AssoId = T.Var_AssoId and a.Dt_UpdatedOn = T.Dt_UpdatedOn 
ORDER BY a.Dt_UpdatedOn 
+0

謝謝您的Response.Its工作很好.. – user2514925

0

查詢:

SELECT a.Var_AssoId, 
      a.Var_Geo, 
      a.Var_Vertical, 
      a.Var_AccountID, 
      a.Dt_VisaValidFrom, 
      a.Dt_VisaValidTill, 
      a.Var_Grade, 
      a.Var_ProjectID, 
      a.Bit_SupervisorResponse, 
      a.Int_CommentID, 
      a.Var_CommentsEntered, 
      a.Dt_Date, 
      a.Bit_MailUploadStatus, 
      a.Var_MailUploadPath, 
      a.Dt_UpdatedOn, 
      a.Var_UpdatedBy, 
      a.Var_SupervisorComments 
FROM (
     SELECT Var_AssoId, 
      Var_Geo, 
      Var_Vertical, 
      Var_AccountID, 
      Dt_VisaValidFrom, 
      Dt_VisaValidTill, 
      Var_Grade, 
      Var_ProjectID, 
      Bit_SupervisorResponse, 
      a.Int_CommentID, 
      Var_CommentsEntered, 
      Dt_Date, 
      Bit_MailUploadStatus, 
      Var_MailUploadPath, 
      a.Dt_UpdatedOn, 
      Var_UpdatedBy, 
      b.Var_SupervisorComments, 
      ROW_NUMBER()OVER(PARTITION BY Var_AssoId ORDER BY a.Dt_UpdatedOn Desc) rnk 
    FROM Testingpmo_Travelready_SupervisorInput a 
    INNER JOIN Testingpmo_Travelready_SupervisorComments b ON a.Int_CommentID=b.Int_CommentID 
)a 
WHERE a.rnk = 1 
    ORDER BY a.Dt_UpdatedOn 
0

請嘗試以下查詢

SELECT 
    Var_AssoId, Var_Geo, 
    Var_Vertical, Var_AccountID,    
    Dt_VisaValidFrom, Dt_VisaValidTill, 
    Var_Grade, Var_ProjectID, Bit_SupervisorResponse, 
    a.Int_CommentID, Var_CommentsEntered,Dt_Date, 
    Bit_MailUploadStatus, Var_MailUploadPath, 
    a.Dt_UpdatedOn, Var_UpdatedBy, b.Var_SupervisorComments 
FROM Testingpmo_Travelready_SupervisorInput a 
INNER JOIN Testingpmo_Travelready_SupervisorComments b ON a.Int_CommentID = b.Int_CommentID 
WHERE a.Dt_UpdatedOn = (SELECT MAX(sub.Dt_UpdatedOn) FROM Testingpmo_Travelready_SupervisorInput sub WHERE sub.Var_AssoId = Var_AssoId) 
ORDER BY a.Dt_UpdatedOn