Получение 2 лучших сумм с самыми последними датами - PullRequest
0 голосов
/ 22 октября 2018

Мой исходный код принимал все транзакции за последние 12 месяцев и сравнивал две верхние самые высокие единичные транзакции.

Если самый высокий единственный подарок за этот период времени более чем в два раза превышает 2-й самый большой одиночныйсделка, возьмите 2-й самый высокий подарок.Если самый высокий подарок № 1 не в два раза больше, он используется.

Я обнаружил, что мне нужно использовать самые последние даты с двумя верхними суммами с вышеуказанными правилами.Если я использую последние 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
...