非顺序 SQL 分区



块引用

我正在尝试对一组数据进行分区,但我不希望我的分区是"顺序的"。

传统上,通过按ID分区,然后按销售阶段划分,我得到了这个。顺序分区。

ROW_NUMBER() OVER(PARTITION BY  ID,  sale stage ORDER BY  Converge, modified date desc)
ID               sale stage      modified date      partition
01_AAI_73133    Closed Lost        5/1/2015             1
01_AAI_73133    Closed Lost        4/26/2015            2
01_AAI_73133    Closed Lost        4/20/2015            3
01_AAI_73133    Locked and Loaded  4/5/2015             1
01_AAI_73133    Locked and Loaded  3/29/2015            2
01_AAI_73133    Pitching           3/7/2015             1
01_AAI_73133    Pitching           2/14/2015            2
01_AAI_73133    Pitching           2/1/2015             3
01_AAI_73134    Pitching           1/20/2015            4

我真正想要的是这个

ID               sale stage      modified date      partition
01_AAI_73133    Closed Lost        5/1/2015             1
01_AAI_73133    Closed Lost        4/26/2015            1
01_AAI_73133    Closed Lost        4/20/2015            1
01_AAI_73133    Locked and Loaded  4/5/2015             2
01_AAI_73133    Locked and Loaded  3/29/2015            2
01_AAI_73133    Pitching           3/7/2015             3
01_AAI_73133    Pitching           2/14/2015            3
01_AAI_73133    Pitching           2/1/2015             3
01_AAI_73134    Pitching           1/20/2015            3

有没有人知道如何实现这一目标?

谢谢

您可能正在寻找dense_rank()

DENSE_RANK() OVER (ORDER BY ID, salestage)

如果您尝试按每个 id 和销售阶段的最大日期排序,则可能需要一个子查询:

select dense_rank() over (order by maxmd, id, salestate)
from (select . . .,
             MAX(ModifiedDate) OVER (PARTITION BY ID, salestage) as maxmd
      from . . .
     ) t;

最新更新