sql - 条件排名

标签 sql snowflake-cloud-data-platform rank

我正在尝试按客户的首次付款日期对客户的帐户进行排名。有时,他们开设的第一个帐户永远不会存入资金,因此“First_pay_date”的日期为“1900-01-01”。我想保留该行信息,但不想将其包含在排名中。

代码的当前结果:

<表类=“s-表”> <标题> CUST ACCT FIRST_PAY_DATE RANK_BY_FIRST_PAY <正文> 约翰·H 约翰NH1 1900-01-01 空 约翰·H 约翰NH2 2000-02-25 2 约翰·H 约翰NH3 2001-03-21 3 约翰·H 约翰NH4 2002-12-01 4

期望的结果:

<表类=“s-表”> <标题> CUST ACCT FIRST_PAY_DATE RANK_BY_FIRST_PAY <正文> 约翰·H 约翰NH1 1900-01-01 0 约翰·H 约翰NH2 2000-02-25 1 约翰·H 约翰NH3 2001-03-21 2 约翰·H 约翰NH4 2002-12-01 3
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/

相关文章:

'order by' 不确定时的 SQL 分页

php - 如何使用 PHP 函数更有效地获取表中多列的排名

python - 有没有更有效的方法在 Django 中根据条件参数数量编写此自定义 SQL?

SQL WHERE 取决于星期几

java - @Where 子句在 hibernate 连接查询中不起作用

python - Tensorflow:如何将 1 阶张量转换为 2 阶张量

评级网站的算法/技术(除了 PageRank)

snowflake-cloud-data-platform - 雪花数据库 : How to run a report showing all database/schema names?

python - 如何将点分隔表指定为 sql 查询的参数

sql - 从 Snowflake 中的日期时间减去 2 小时