使用 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。
这是我在 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。