我希望有人能告诉我我的语法哪里错了,或者让我知道有没有更好的方法来实现我的目标。我获取了一个大型数据集,并应用了许多标识字段,以供以后对数据进行分组。我想对数据应用一个唯一的'Cohort ID‘,我可以使用它来对数据进行分组。我认为Row_Number() Over (Partition)类型的结构可以工作,但由于某种原因显然不行。我得到的队列I对于我指定的字段是不同的,而它们应该是相同的。我的代码如下:
为了进一步指定我尝试执行的操作,如果下面所选字段中的所有项目对于两个不同的数据行都相等,我希望使用相同的Cohort ID来标记该数据。如果下一行与前两行相同,例如,除了不同的“Issuer”,我希望它获得不同的Cohort ID。
下面的数据示例包含我预期的队列ID
Asset_Type Account Issuer Return_Bucket Age_Bucket Type_Bucket Risk_Bucket Cohort ID
Equity Client 1 Bank A 10-15 3-6 months Financial Moderate 1
Equity Client 1 Bank A 10-15 3-6 months Financial Moderate 1
Equity Client 1 Bank A 10-15 6-12 months Financial Moderate 2
Equity Client 1 Bank A 10-15 6-12 months Financial Moderate 2
Equity Client 1 Bank A 10-15 6-12 months Financial High 3
Fixed Client 1 Bank A 10-15 6-12 months Financial High 4
Equity Client 1 Bank A 5-10 3-6 months Financial Moderate 5
Select
Row_Number() Over(Partition By [Asset_Type],
[Account],
[Issuer],
[Return_Bucket],
[Age_Bucket],
[Type_Bucket],
[Risk_Bucket]
Order by [Account]) Account AS CohortID
into Test_Table_2
from Test_Table_1发布于 2020-01-07 23:02:43
您的示例结果表明您需要dense_rank() --没有差距:
Select t.*
dense_rank() Over (order by [Asset_Type], [Account], [Issuer], [Return_Bucket],
[Age_Bucket], [Type_Bucket], [Risk_Bucket]
) as CohortID
into Test_Table_2
from Test_Table_1 t;partition by将计数分成不同的组。这意味着1将在每个组中重复。order by只是简单地对它们进行排序。
我假设您也有其他的专栏。表中的重复项通常不是很有用。相反,我建议您删除它们。
发布于 2020-01-07 22:58:10
YOu可以使用RANK,不需要分区:
Select *,
Rank() Over(ORDER By [Asset_Type],
[Account],
[Issuer],
[Return_Bucket],
[Age_Bucket],
[Type_Bucket],
[Risk_Bucket]) AS CohortID
into Test_Table_2
from Test_Table_1https://stackoverflow.com/questions/59630283
复制相似问题