首页 > 解决方案 > 过滤 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

查询有效,但我需要了解这两个问题!

标签: sqlsql-serverjoin

解决方案


您可以使用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;

推荐阅读