Sql 如何使用RANK OVER PARTITION BY创建基于两列的排名?

Sql 如何使用RANK OVER PARTITION BY创建基于两列的排名?,sql,oracle,Sql,Oracle,由于数据不一致,我有重复记录。我试图为每个患者只采集一份记录(采集最新记录),由于地址更改,每个患者都有几十份重复记录 当我运行下面的代码时,表中的每条记录似乎都被分配了一个等级1。如何为每个患者ID分配特定的排名 SELECT DISTINCT PATIENT_ID ,ADDRESS_START_DATE ,ADDRESS_END_DATE ,RANK() OVER (PARTITION BY PATIENT_ID ,ADDRESS_START_DATE

由于数据不一致,我有重复记录。我试图为每个患者只采集一份记录(采集最新记录),由于地址更改,每个患者都有几十份重复记录

当我运行下面的代码时,表中的每条记录似乎都被分配了一个等级1。如何为每个患者ID分配特定的排名

SELECT DISTINCT
     PATIENT_ID
     ,ADDRESS_START_DATE
     ,ADDRESS_END_DATE
     ,RANK() OVER (PARTITION BY PATIENT_ID ,ADDRESS_START_DATE ORDER BY ADDRESS_START_DATE DESC) AS Ind
FROM Member_Table
;

如果按地址、开始日期排序,则不应按地址、开始日期进行分区:

选择DISTINCT
病人编号
,地址\开始日期\日期
,地址\结束\日期
,RANK()超过(按患者ID划分,按地址顺序,按开始日期描述)作为Ind
从成员表
;

如果您是按地址、开始日期进行订购,则不应按地址、开始日期进行分区:

选择DISTINCT
病人编号
,地址\开始日期\日期
,地址\结束\日期
,RANK()超过(按患者ID划分,按地址顺序,按开始日期描述)作为Ind
从成员表
;

Remove ADDRESS\u START\u DATE from PARTITION。Remove ADDRESS\u START\u DATE from PARTITION。我明白了,这是一个很好的经验法则。这样做会给所有相同的患者ID-地址-开始日期对分配相同的等级,对吗?我在这个组合中也有重复的…@bhbennett3<代码>排名()分配了相同的排名
row_number()
也会为枚举返回一个不同的值,即使有关联。我明白了,这是一个很好的经验法则。这样做会给所有相同的患者ID-地址-开始日期对分配相同的等级,对吗?我在这个组合中也有重复的…@bhbennett3<代码>排名()分配了相同的排名
row_number()
还将为枚举返回一个不同的值,即使在存在关联的情况下也是如此。