date - 获取最近日期的前 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
解决方案
推荐阅读
- elasticsearch - 通过在 elasticsearch 中更新向现有文档添加新字段
- php - 将包含嵌套连接的 mysql 原始查询转换为 laravel eloquent
- ios - 根据数据/单元格数更改 TableView 的高度锚点
- angular-aot - @ngtools/webpack 从 Angular4 迁移到 Angular7 后不编译项目代码
- python - 按日期时间选择特定的列和行,格式为 '4/1/2019 7:57'
- image - 从 RGB 到 xyY 空间对颜色进行采样
- hibernate - Criteria API concat 3 字段值
- javascript - Compatibility issues with storing dates in my state using redux-form whilst using the ant design date picker
- c++ - 找不到用于在 C++ 中编写的 gnuplot.exe 路径
- node.js - RXJS Observables 的服务器端实现