使用 SQL 和 Matillion for Employee table,我只需要提取最近的员工雇用日期

Using SQL and Matillion for Employee table, I need to pull only the most recent employee hire date

这是我在 SSMS 中编写的代码,它可以很好地满足我的目的,但是尝试对 Matillion 使用相同的原则(是的,我必须在我的公司使用 Matillion)我仍然有重复的员工,但不能简单地使用 Distinct就像他们辞职并重新雇用一样,雇用日期不同,并且被分配了新的员工 ID。我只是想制作一份员工摘要 table,每个人只使用他们最近的雇用日期并排除之前的条目,这是我在 SSMS 中的内容。

SELECT 

[PersonId] as 'Employee Id'
,[LastName] as 'Last Name'
  

    ,[FirstName] as 'First Name'
      ,[MiddleName] as 'Middle Name'
      ,[KnownAs] as 'Goes By'
      ,[HireDate] as 'Hire Date'
      ,[Address1] as 'Address'
      ,[Address2] as 'Address Contd'
      ,[City] as 'City'
      ,[State] as 'State'
      ,[Zip] as 'Zip Code'
      ,[EmployeeStatus] as 'Employee Status'
      ,[EmployeeType] as 'Employee Type'
      ,[BusinessTitle] as 'Business Title'
      ,[DateofBirth] as 'Date of Birth'
      ,[Gender] as 'Gender'
      ,[HomePhone] as 'Phone Number'
      ,[ReportsToName] as 'Supervisor Name'
      ,[SupervisorId] as 'Supervisor Id'
      ,[EmailAddress] as 'Email'
      ,[JobDescription] as 'Job Description'
      ,[DepartmentNumber] as 'Dept Number'
      ,[RaceEthnicty] as 'Race/Ethnicity'
      ,[PayRate] as 'Pay Rate'
      ,[FullPartTime] as 'Full / Part Time'
      ,[PayGroup] as 'Pay Group'
      ,[SSN] as 'SSN (encrypted)'
      ,[jobcode] as 'Job Code'

FROM [SuccessFactorsCensus].[dbo].[Census] C
WHERE HireDate=(SELECT MAX(HireDate) 
FROM [SuccessFactorsCensus].[dbo].[Census]
WHERE PersonId = C.PersonId)

这将生成一个查询,其结果与您在上面所做的相同:

对于子查询:

  • Table 来自 [SuccessFactorsCensus].[dbo].[Census]
  • 的输入
  • 聚合组件 - 在 PersonId 上添加分组,在列 HireDate
  • 上添加 Max 的聚合

对于主要查询:

  • Table 来自 [SuccessFactorsCensus].[dbo].[Census]
  • 的输入
  • 加入组件
    • 将上面的输入用作“主要Table”
    • 加入聚合组件的输出
    • 连接类型:左
    • 联接表达式:x.PersonId = y.PersonId(将 x/y 替换为您指定的别名)

但是:如果员工每次开始时都会获得一个新的 PersonId,并且有些员工会 re-hired 多次,那么您不能使用 PersonId 来 link 多次雇用的员工的记录。您需要使用其他一些属性,例如SSN 将是一个很好的选择,因为每次雇用时每位员工都应该使用相同的 SSN。如果您无权访问它(例如,它是加密的),那么您可以尝试使用电子邮件地址或姓名 + 地址来尝试获取唯一人员列表。您需要先解决此问题,然后才能尝试为每个人获取最大 HireDate。