我有NAME和PAY,但在此示例中我需要CHANGEGROUP:
NAME PAY DATE CHANGEGROUP Sally 12 10/01/2011 1 Sally 12 10/01/2011 1 Sally 12 11/02/2011 1 Sally 12 11/02/2011 1 Sally 12 12/01/2012 1 Sally 13 04/23/2013 2 Sally 12 04/24/2013 3 Sally 10 05/01/2013 4 Sally 10 10/01/2014 4
我尝试了RANK()和DENSE_RANK(),但是它们根据值进行了分组- 因为薪水下降了,所以弄乱了我的分组。我看到了这一点,但它与此旧版本的SQL 2005不兼容
RANK()
DENSE_RANK()
这是一个鸿沟和孤岛的问题。
一种方法。SQL小提琴
WITH T1 AS (SELECT *, ROW_NUMBER() OVER ( PARTITION BY NAME ORDER BY DATE) - ROW_NUMBER() OVER ( PARTITION BY NAME, [PAY] ORDER BY DATE) AS Grp FROM Table1), T2 AS (SELECT *, MIN(DATE) OVER ( PARTITION BY NAME, Grp) AS MinDate FROM T1) SELECT [NAME], [PAY], [DATE], DENSE_RANK() OVER ( PARTITION BY NAME ORDER BY MinDate) AS CHANGEGROUP FROM T2 ORDER BY NAME, MinDate