我正在尝试按客户的首次付款日期对客户的帐户进行排名。有时,他们开设的第一个帐户永远不会存入资金,因此“First_pay_date”的日期为“1900-01-01”。我想保留该行信息,但不想将其包含在排名中。
代码的当前结果:
期望的结果:
SELECT
cust,
acct,
first_pay_date,
CASE
WHEN first_pay_date <> '1900-01-01' THEN RANK() OVER(PARTITION BY cust
ORDER BY
first_pay_date)
END rank_by_first_pay
FROM
acct_table
ORDER BY
first_pay_date ASC
最佳答案
除非我遗漏了一些东西,否则 rank()... - 1
应该返回您想要的结果,不需要 case
表达式:
SELECT
cust,
acct,
first_pay_date,
RANK() OVER(PARTITION BY cust
ORDER BY
first_pay_date) - 1
rank_by_first_pay
FROM
acct_table
ORDER BY
first_pay_date ASC
根据您在平局情况下想要的行为,您可能需要使用 dense_rank()
而不是 rank()
。
关于sql - 条件排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71365154/