2012-11-13 89 views
0

最後一個記錄我有一個表:如何從表

表A

ID (PK)(Identity seed) 
    Key (nvarchar) (Unique Hashed Keys) 

數據:

ID   Key 
    ----------- -------------------------------------------------- 
    1   ++0a4rZicJ68kProEpK/ig        
    2   ++0Coy1S7szg3NjLi2kMLQ        
    3   ++0eeYiZuRPxsiVVsBcfdg        
    4   +F07I6n6kLvC/I98So8Y+w        
    5   +f/RK7VMWIIo5IfUcMujmg 

表B:(無PK)

Content (nvarchar) 
    SortKey (nvarchar) 

數據:

Content   SortKey 
    ----------- -------------------------------------------------- 
    TEST1   ++0a4rZicJ68kProEpK/ig        
    TEST2   ++0Coy1S7szg3NjLi2kMLQ        
    TEST3   ++0eeYiZuRPxsiVVsBcfdg        
    TEST4   +F/ZdeGRjbC4sP6ulQnOvg        
    TEST5   +f0+6vJcwY++Xdx5lch1kQ 
    TEST6   +f/RK7VMWIIo5IfUcMujmg <-- Expected Result starts here 
    TEST7   +F07I6n6kLvC/I98So8Y+w 
    TEST8   +f0990bHYJUOXkyME+0kmg 

查詢:

SELECT top 3 * 
FROM 
    TABLEB 
WHERE 
    SortKey > (SELECT top 1 Key 
       FROM TABLEA 
       ORDER BY ID DESC) 
ORDER BY 
    SortKey 

上述查詢給我所希望的結果,其比SortKey(++ 1l32JdpYoHzXTCIp4jSA)更大:

TEST6   +f/RK7VMWIIo5IfUcMujmg 
TEST7   +F07I6n6kLvC/I98So8Y+w 
TEST8   +f0990bHYJUOXkyME+0kmg 

一旦我得到這個結果我需要再次獲得最後的(最後一個記錄)鍵在另一個表上執行插入操作,所以我需要獲得密鑰TEST8在這種情況下,即:f/RK7VMWIIo5IfUcMujmg。

如何在單個查詢中執行此操作,而不必編寫2個單獨的查詢?

+0

對不起,我剛纔添加的隨機密鑰,應該已經使用了正確的人,讓我看看,如果我可以糾正 –

+0

更新的鍵列有正確的價值,現在排序應該給結果 –

回答

1

你可以使用ROW_NUMBER()

WITH CTE AS 
(
SELECT 
     ROW_NUMBER() OVER (ORDER BY CONTENT DESC) rn, 
     Content, 
     SortKey 
FROM tableb 
WHERE sortkey < (SELECT TOP 1 [key] 
        FROM tablea 
        ORDER BY id DESC) 
) 
SELECT 
    Content, 
    SortKey 
FROM CTE 
WHERE RN = 1 

DEMO

+0

爲什麼我們要對內容進行ORDER BY?內容只是純文本,並沒有相關性,「關鍵」是主要的專欄。 –

+0

@MurtazaMandvi我認爲定義了「最後的記錄」。如果它的sortkey,你可以用它來代替。也許我誤解了期望的輸出結果? –