【发布时间】:2019-05-31 12:54:26
【问题描述】:
我对sql有点新,我有这个问题要从三个表中获取特定信息。我有这三张桌子。
员工表
公司表
就业表
就业中的 EmployeeID 是 FK Company 中的 CompanyID 为 FK Employment中的EmploymentID是PK EmploymentEndDate 中的 NULL 表示该工人目前正在那里工作。
我一直在尝试,但没有工作
select Company.CompanyName as CompanyName , CONCAT( Employee.FirstName, ' ' ,Employee.LastName) as EmployeeName , Employment.EmploymentStartDate from Employment LEFT JOIN Employee on Employee.EmployeeID = Employment.EmployeeID
LEFT JOIN Company on Company.CompanyID = Employment.CompanyID
where Employment.EmploymentEndDate is null
and EXISTS(SELECT Employment.CompanyID, MAX(DATEDIFF( DAY,Employment.EmploymentStartDate ,GETDATE())) as MaxDate FROM Employment where Employment.EmploymentEndDate is null group by CompanyID)
并且给了我这个结果:
这是错误的,因为我希望来自“Steve's Widgets Inc”公司的只有 John Doe,他是最年长的工人。
这正是我想要的,列出所有公司,并给出目前在该公司工作时间最长的员工的姓名和开始日期。 (预期列:CompanyName、EmployeeName、EmploymentStartDate)
【问题讨论】:
-
您要解决的问题有点不清楚。请编辑以使问题更直接。另外,请格式化 SQL 代码,使其更具可读性。
-
@EricWu 这就是我想要的,列出所有公司,并给出目前在该公司工作时间最长的员工的姓名和开始日期。 (预期列:CompanyName、EmployeeName、EmploymentStartDate)
-
“最老”和“在公司工作最久”之间存在冲突。您对最大年龄或最小雇用日期感兴趣吗?以可消费的形式提供 DDL 和示例数据也很有帮助,而不仅仅是数据图片。不使用图片的原因是here。
标签: sql sql-server tsql