当列值更改时对 Sql Server 表行进行排名

Rif*_*man 5 sql sql-server rank

我在 SQL Server 中有一个这样的表 -

ID  Employee_id  group_field_code   from_date              To_date
================================================================================
1   44855           055            2015-04-01 00:00:00  2015-04-02 17:37:26
2   44855           055            2015-04-02 17:37:27  2015-04-25 09:31:10
3   44855           055            2015-04-25 09:31:11  2015-09-18 14:58:59
4   44855           053            2015-09-18 15:00:00  2016-04-02 02:58:59
5   44855           055            2016-04-02 03:00:00  2016-05-26 02:58:59
6   44855           055            2016-05-25 13:25:23  2016-09-07 14:58:59
7   44855           055            2016-05-26 03:00:00  2016-05-25 13:25:22
8   44855           052            2016-09-07 15:00:00  2017-05-22 02:58:59
9   44855           055            2017-05-22 03:00:00  NULL
Run Code Online (Sandbox Code Playgroud)

我想要的只是当组字段更改时一行的新排名。就像-对于ID 1-3(group_code 55)我想要一个排名,对于ID 4(group_Code更改,53)我想要另一个排名,然后对于ID 5(group_code 5重新到达)我想要另一个排名,依此类推。在 SQL Server 中使用 Rank 或其他函数可以实现这一点吗?

Tim*_*sen 3

我们可以尝试使用行号差异法:

SELECT
    ID, Employee_id, group_field_code, from_date, To_date,
    DENSE_RANK() OVER (ORDER BY rank) rank
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY from_date) -
        ROW_NUMBER() OVER (PARTITION BY group_field_code ORDER BY from_date) AS rank
    FROM yourTable
) t
ORDER BY t.from_date;
Run Code Online (Sandbox Code Playgroud)

演示在这里:

雷克斯特