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
我不确定是否可以这样做。我想根据具有连续日期的公司对数据进行分组。以下是我在 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