从不同员工编号列表中选择最早日期

时间:2019-12-09 20:39:13

标签: sql join group-by

SELECT 
    a1.[employee_number], 
    a1.[class_id], 
    a1.[TraineeAddedOn],
    a1.[TraineeRemovedOn], 
    a1.[effective_start_date], 
    a2.REHIRE
FROM TrainingAnalytics_Staging..VW_FACT_TRAINING_USER_INFO a1
LEFT JOIN DW..[VW_DIM_EMPLOYEE_DETAIL] a2 ON a1.employee_number = a2.employee_number
GROUP BY a1.class_id
HAVING MIN(a1.TraineeAddedOn)

我正在使用此查询,但出现此错误:

  

在上下文中指定的非布尔类型的表达式,其中   状况可能在')'附近。

2 个答案:

答案 0 :(得分:0)

请尝试以下查询

   SELECT Top 1 a1.[employee_number], a1.[class_id], a1.[TraineeAddedOn],
           a1.[TraineeRemovedOn], a1.[effective_start_date], a2.REHIRE
    FROM TrainingAnalytics_Staging..VW_FACT_TRAINING_USER_INFO a1
    LEFT JOIN
            DW..[VW_DIM_EMPLOYEE_DETAIL] a2
        ON a1.employee_number = a2.employee_number
    ORDER BY a1.TraineeAddedOn

答案 1 :(得分:0)

基本上,您正在尝试获取每位员工的最低TraineeAddedOn吗? 我认为这样可以:

-- First get list of min date per employee
With MinDatePerEmploye AS 
(
SELECT employee_number, MIN(TraineeAddedOn) AS MinTraineeAddedOn
FROM TrainingAnalytics_Staging..VW_FACT_TRAINING_USER_INFO
GROUP BY employee_number
)
-- and now join that up with rest of dataset
SELECT 
    a1.[employee_number], 
    a1.MinTraineeAddedOn,
    a2.[class_id], 
    a2.[TraineeAddedOn],
    a2.[TraineeRemovedOn], 
    a2.[effective_start_date], 
    a2.REHIRE
FROM MinDatePerEmploye a1
INNER JOIN TrainingAnalytics_Staging..VW_FACT_TRAINING_USER_INFO a2
ON a1.employee_number = a2.employee_number AND a1.MinTraineeAddedOn = a2.TraineeAddedOn
相关问题