有没有一种方法可以对 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
我正在尝试让排名或分组像 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