【问题标题】:Filter users with FIRST transaction higher than threshold过滤 FIRST 交易高于阈值的用户
【发布时间】:2019-11-18 16:57:40
【问题描述】:

我得到了以下测试任务:编写一个查询来识别其第一笔交易是成功的卡支付超过 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

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

【问题讨论】:

  • “有效”是什么意思? “没有任何分配的变量”是什么意思? PS 请在代码问题中提供minimal reproducible example--剪切&粘贴&可运行代码;具有所需和实际输出(包括逐字错误消息)的示例输入(作为表格初始化代码);标签和版本;明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)如果您收到不理解的消息或结果,请暂停您的总体目标并调试您的误解。
  • 这里的所有部分都是常见问题解答。在考虑发布之前,请始终在谷歌上搜索任何错误消息和许多清晰、简洁和准确的问题/问题/目标的措辞,带或不带您的特定字符串、名称和行号以及带和不带“site:stackoverflow.com”并阅读许多点击和答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql sql-server join


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多