Мой исходный код принимал все транзакции за последние 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