sql - 过滤 FIRST 交易高于阈值的用户
问题描述
我得到了以下测试任务:编写一个查询来识别其第一笔交易是成功的卡支付超过 10 美元等值的用户
我所做的是确保交易适用于“美元等值”,并确保交易金额不以最低单位表示,例如便士(通过指数)。
我现在正在努力为任何用户的第一笔交易过滤我的表,并使其高于 10 美元等值(我尝试在“金额”上使用 WHERE 语句,但没有任何分配的变量(根据到 SQL Server)。
SELECT t.USER_ID,
SUM(t.amount / fx.rate / power(10, cd.exponent)) AS amount,
t.CURRENCY,
t.CREATED_DATE
FROM transactions$ t
JOIN fx_rates$ fx ON (fx.ccy = t.currency AND fx.base_ccy = 'USD')
JOIN currency_details$ cd ON cd.currency = t.currency
WHERE t.STATE = 'COMPLETED'
AND t.TYPE = 'CARD_PAYMENT'
GROUP BY t.USER_ID, t.CURRENCY, t.CREATED_DATE
ORDER BY amount DESC
查询有效,但我需要了解这两个问题!
解决方案
您可以使用ROW_NUMBER()
枚举行,然后使用它进行过滤:
SELECT t.*
FROM (SELECT t.USER_ID,
(t.amount / fx.rate / power(10, cd.exponent)) AS amount,
t.CURRENCY,
t.CREATED_DATE,
ROW_NUMBER() OVER (PARTITION BY t.USER_ID ORDER BY t.CREATED_DATE) as seqnum
FROM transactions$ t JOIN
fx_rates$ fx
ON fx.ccy = t.currency AND fx.base_ccy = 'USD' JOIN
currency_details$ cd
ON cd.currency = t.currency
WHERE t.STATE = 'COMPLETED' AND t.TYPE = 'CARD_PAYMENT'
) t
WHERE seqnum = 1 AND amount >= 10;
推荐阅读
- html - React - dangerouslySetInnerHTML 不显示正确的结果
- swift - Rxswift如何调用1个或多个函数以返回另一个函数
- javascript - Checkmarx 扫描 - 如何修复 Missing_HSTS_Header 警告?
- c# - C# While 循环只返回一次迭代,无论输入如何
- asp.net - 如何更改 EPPLUS 圆环图中的标签位置?
- java - 在arraylist中返回null的变量
- wkwebview - 如何限制在 runOpenPanelWith 中可以从 WKWebView UI 委托中选择哪些文件?
- c# - 将对象转换为列表
- c# - 当我在使用 asp.net core 3.1 时收到此错误,值不能为空。(参数“连接字符串”)
- r - 使用列表查找列表在第二个列表列表中查找高于阈值的值并量化它们