我正在使用SQL Server 2008 R2,并且具有遵循以下格式的数据,并且希望通过“ Eff_Date”列更改“ Cat_Code”。
数据按“ Emp_ID”和“ Eff_Date”排序,“ Cat_Code”是字符串值“ Eff_Date”,“ Date_Updated”仅是日期。 谁能帮我写查询吗?预先感谢。
表格数据:
**Emp_ID Eff_Date Cat_Code Date_Updated User_ID**
100021 27/12/2015 030 28/12/2015 FER
100021 27/12/2015 030 07/01/2016 AZI
100021 16/04/2016 030 17/04/2016 FER
100021 01/11/2016 030 13/11/2016 FER
100021 01/02/2019 030 23/02/2019 AZI
100021 01/08/2019 021 25/08/2019 IK
100054 05/09/2014 030 07/09/2014 FER
100054 01/12/2014 030 21/12/2014 WAL
100054 28/04/2015 030 28/04/2015 IK
100054 01/05/2015 030 17/05/2015 WAL
100054 01/05/2016 030 15/05/2016 AZI
100054 13/07/2018 030 11/08/2018 AZI
100054 01/11/2018 030 12/12/2018 AJA
100054 01/01/2019 030 17/01/2019 MMAC
100054 01/08/2019 021 25/08/2019 IK
100086 01/09/2015 030 15/09/2015 FER
100086 01/09/2015 030 16/09/2015 AJA
100086 01/09/2015 030 30/09/2015 MRA
100086 16/09/2015 030 16/09/2015 AJA
100086 01/11/2015 030 19/11/2015 AZI
100086 28/08/2016 030 28/08/2016 FER
100086 01/11/2016 030 15/11/2016 FER
100086 01/10/2017 030 30/09/2017 FER
100086 01/11/2017 048 16/07/2019 GPA
100086 01/11/2017 030 12/11/2017 AJA
100086 01/11/2017 048 22/01/2018 FER
100086 10/03/2018 048 26/03/2018 FER
100086 01/06/2018 048 07/08/2018 AZI
100086 01/04/2019 048 27/04/2019 AZI
100086 01/07/2019 030 13/07/2019 GPA
100086 01/07/2019 030 16/07/2019 GPA
预期结果:
**Emp_ID Eff_Date Cat_Code Date_Updated User_ID**
100021 27/12/2015 030 28/12/2015 FER
100021 01/08/2019 021 25/08/2019 IK
100054 05/09/2014 030 07/09/2014 FER
100054 01/08/2019 021 25/08/2019 IK
100086 01/09/2015 030 15/09/2015 FER
100086 01/11/2017 048 22/01/2018 FER
100086 01/07/2019 030 13/07/2019 GPA
答案 0 :(得分:1)
您没有提供足够的有关您的问题的详细信息,但您的查询可能是这样的:
WITH cte AS (
SELECT Emp_ID
,Eff_Date
,Cat_Code
,isnull(lag(Cat_Code) OVER (
PARTITION BY Emp_ID ORDER BY Eff_Date
), '-1') last_CatCode
,Date_Updated
,User_ID
FROM yourtable
)
SELECT
*
FROM cte
WHERE Cat_Code != last_CatCode;
更新:
SELECT Emd_ID,
Cat_Code,
User_ID,
MIN(Eff_Date) AS Min_Eff_Date,MAX(Date_Updated) AS Max_Date_Updated
FROM yourTable
GROUP BY Emd_ID,
Cat_Code,
User_ID;