SQL 带分组的行号

SQL Row Number with Grouping

我不确定是否可以这样做。我想根据具有连续日期的公司对数据进行分组。以下是我在 SQL.

中尝试的预期结果
EmpNo Company StartDt EndDt Desired Result
0003 C01 2021-01-01 00:00:00.000 2021-01-10 00:00:00.000 1
0003 C02 2021-01-11 00:00:00.000 2021-01-15 00:00:00.000 2
0003 C02 2021-01-16 00:00:00.000 2021-01-20 00:00:00.000 2
0003 C01 2021-01-21 00:00:00.000 2021-01-31 00:00:00.000 3

类似于:

SELECT * FROM `<your-table>`
GROUP BY `Company`
ORDER BY `StartDt` DESC

您可以使用 lag() 来检测公司何时发生变化,然后进行累计:

select t.*,
       sum(case when company = prev_company then 0 else 1 end) over (partition by empno order by startdt) as desired_result
from (select t.*,
             lag(company) over (partition by empno order by startdt) as prev_company
      from t
     ) t