有没有一种方法可以对 SQL Teradata 中的排名进行分组,然后根据最近的交易对它们进行排序?

Is there a way to group rankings in SQL Teradata and then order them by which one has the most recent transaction?

我正在尝试让排名或分组像 custom_ranking_2 列中那样计数:

我希望它像在行 custom_ranking_2 中一样计算排名,但我一直在尝试的一切都是在 custom_ranking 行中计算它。

我原来的查询是:

,row_number() OVER (partition by custID, propID  ORDER BY trans_type desc, record_date desc) AS RANKING

在该查询中,我试图按 custID 和 propID 进行分组,然后按 trans_type desc(r 为 1,p 为 2,o 为 3,h 为 4)和 record_date描述

然后我需要它来对排名进行分组,所以我问了这个问题,有人告诉我我需要 dense_rank 函数:

,dense_rank() OVER (partition by custID ORDER BY propID) AS custom_ranking

所以现在我正在尝试解决如何保持分组排名,但仍然由 propID 完成排名,其中包含最近的交易。

您可以使用子查询来获取最大日期:

select t.*,
       dense_rank() over (partition by custid order by max_record_date desc, propid)
from (select t.*,
             max(record_date) over (partition by custid, propid) as max_record_date
      from t
     ) t;

或者,如果您愿意,join 也可以:

select t.*, tt.seqnum
from t join
     (select custid, propid,
             row_number() over (partition by custid order by max(record_date) desc) as seqnum
      from t
      group by custid, propid
     ) tt
     on tt.custid = t.custid and tt.propid = t.propid