如何根据列过滤器缩小不同的行?

win*_*sgm 2 sql sql-server sql-server-2008 greatest-n-per-group

我正在尝试搜索最近发生的一堆事务,但只希望每次事务返回一次.我对代码问题的尝试比我更好地解释了它.

SELECT 
DISTINCT    TransactionCode
    ,       IdKey 
FROM        TransTable 
WHERE       TransactionCode IN (<massive list of ids...>) 
AND         ActionDate      < GETDATE() 
ORDER BY    ActionDate DESC
Run Code Online (Sandbox Code Playgroud)

我想要每个事务代码的一个实例,按日期排序(也就是最近发生的那个事务),并返回idKey.思考?

Mik*_*son 5

SELECT TransactionCode, 
       IdKey
FROM
  (
    SELECT TransactionCode, 
           IdKey,
           ROW_NUMBER() OVER(PARTITION BY TransactionCode 
                             ORDER BY ActionDate DESC) AS rn
    FROM TransTable 
    WHERE TransactionCode in (1,2,3) AND 
          ActionDate < GETDATE() 
  ) T
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)