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を取得する必要があります。

これを1つのクエリで実行し、2つの別々のクエリを作成する必要がないようにするにはどうすればよいですか?

4

1 に答える 1

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

デモ

于 2012-11-13T22:36:28.800 に答える