【问题标题】:Select Earliest Date from List of Distinct Employee numbers从不同员工编号列表中选择最早日期
【发布时间】:2019-12-09 20:39:13
【问题描述】:
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)

我正在使用此查询,但收到此错误:

在上下文中指定的非布尔类型的表达式 条件是预期的,在 ')' 附近。

【问题讨论】:

  • 跳过 GROUP BY/HAVING。做 ORDER BY 和 TOP 1。
  • 那就是HAVING MIN(a1.TraineeAddedOn)。请提供示例数据、期望的结果以及查询应该做什么的一些解释。
  • 嗨,团队。感谢您的答复。我想得到的是,emp_no |开始日期 1234 | 11/2/2019 1234 | 11/1/2019 1234 | 2019 年 11 月 3 日查询输出应为 emp_no |开始日期 1234 | 2019 年 11 月 1 日

标签: sql join group-by


【解决方案1】:

试试下面的查询

   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

【讨论】:

  • 嗨,团队。感谢您的答复。我试图得到的是,employee_number trainee addedon 12345 11/6/2019 12345 11/1/2019 12345 11/2/2019 41523 10/8/2019 41523 10/5/2019 41523 10/19/2019 输出employee_number 1/1/1/12345 1/2019 41523 10/5/2019
  • @xivxiv 不知道你想要的结果是什么。请让一些人容易理解,以便其他人可以回答并帮助您。
【解决方案2】:

基本上,您正在尝试为每个员工获取 min 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

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 2014-01-24
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多