首页 > 解决方案 > 获取最近日期的前 2 位金额

问题描述

我的原始代码是过去 12 个月的所有交易,并比较前两个最高的单笔交易。

如果该时间段内最高单笔赠金大于第二大单笔交易的两倍以上,则取第二高单笔赠金。如果排名第一的最高礼物不是两倍,则使用它。

我发现我需要使用具有上述规则的前 2 个金额的最近日期。如果我使用过去 12 个月,我将无法获得所需的所有金额。

如何更改 where 语句以获取最近的日期,而不是当前日期的最后 12 个月。

输入值

account number, date, and transaction amount.  
7428, 01262018, 2
7428, 12302018, 5
16988 02142016, 100
16988 01152016, 25
22450 04191971, 8
22450 08291971, 10

结果

AccountNumber   Number  Amount
------------------------------
7428    2   5.00
16988   2   25.00
22450   2   10.00
26997   2   10.00
27316   2   25.00
27365   2   25.00
28620   2   10.00
28951   2   10.00
29905   2   5.00    

代码:

DECLARE @start_date date
DECLARE @end_date date

SET @start_date = DATEADD(YEAR, -1, GETDATE())
SET @end_date = GETDATE()

SELECT
    AccountNumber, 
    COUNT(amount) as Number, 
    CASE 
       WHEN MAX(CASE WHEN row_num = 1 THEN amount END) > MAX(CASE WHEN row_num = 2 THEN amount END) * 2
          THEN MAX(CASE WHEN row_num = 2 THEN amount END) 
          ELSE MAX(CASE WHEN row_num = 1 THEN amount END) 
    END AS Amount 
FROM
    (SELECT 
         *, 
         ROW_NUMBER() OVER(PARTITION BY AccountNumber ORDER BY amount DESC) AS row_num
     FROM 
         dbo.[T01_TransactionMaster]
     WHERE 
         date >= @start_date AND date < @end_date) AS tt
WHERE 
    row_num IN (1, 2) 
    AND amount > 0 
    -- AND AccountNumber = 301692
GROUP BY 
    AccountNumber

标签: datesql-server-2016

解决方案


推荐阅读