SQL查询帮助:员工“ Cat_Code”更改为“ Eff_Date”

时间:2019-09-03 08:32:08

标签: sql sql-server

我正在使用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

1 个答案:

答案 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;