按 Spark SQL 中的多列分区无法正常工作

partition by multiple columns in Spark SQL not working properly

我想在查询中按三列进行分区:

  1. 用户编号
  2. 取消月年。
  3. 保留月份年份。

我按如下方式使用行号和分区

row_number() over (partition by user_id ,cast ( date_format(cancelation_date,'yyyyMM') as integer),cast ( date_format(retention_date,'yyyyMM') as integer) order by cast ( date_format(cancelation_date,'yyyyMM') as integer) asc, cast ( date_format(retention_date,'yyyyMM') as integer)   asc) as row_count

我得到的输出示例:

| user_id |cancelation_date |cancelation_month_year|retention_date|retention_month_year|row_count|
| -------- | -------------- |----------------------|--------------|--------------------|---------|
| 566      |      28-5-2020 |  202005              | 20-7-2020    | 202007             |1        |
| 566      |     28-5-2020  |  202005              | 30-7-2-2020  | 202007             |2        |

我想要得到的输出示例:

user_id cancelation_date cancelation_month_year retention_date retention_month_year row_count
566 28-5-2020 202005 20-7-2020 202007 1
566 28-5-2020 202005 30-7-2-2020 202007 1

请注意,用户可能有多个取消月份,例如,如果他在 8 月份取消,我希望 8 月份所有日期的行计数 =2,依此类推。

不清楚为什么分区依据是按保留日期分区而不是按保留月份年份分区。

我的印象是 row_number 不是您想要的,而是您对 dense_rank 感兴趣,您将在其中获得预期的输出。