[英]SQL Join 3 Different Queries
我在下面有一个员工表:
员工姓名 | 生效日期 | 字段类型 | 字段值 |
---|---|---|---|
特里 | 1991 年 1 月 1 日 | 标题 | 讲师 |
特里 | 1991 年 1 月 1 日 | 部门 | LM |
特里 | 1992 年 1 月 1 日 | 标题 | 高级讲师 |
欧文 | 1990 年 1 月 1 日 | 标题 | 行政人员 |
欧文 | 1990 年 1 月 1 日 | 部门 | LM |
我尝试了以下查询:
SELECT DISTINCT Employee.StaffName, NameWithMaxDate.MaxDate
FROM Employee
INNER JOIN
(SELECT StaffName,
MAX(EffectiveDate) OVER (PARTITION BY StaffName) AS MaxDate
FROM Employee) AS NameWithMaxDate
ON Employee.StaffName = NameWithMaxDate.StaffName
我得到以下结果:
员工姓名 | 最大日期 |
---|---|
欧文 | 1990 年 1 月 1 日 |
特里 | 1992 年 1 月 1 日 |
我还有一个疑问:
SELECT StaffName,FieldValue
FROM Employee
WHERE FieldType = 'Department'
AND FieldValue = 'LM'
结果如下:
员工姓名 | 字段值 |
---|---|
特里 | LM |
欧文 | LM |
我有最后一个查询:
SELECT StaffName,FieldValue
FROM Employee
WHERE FieldType = 'Title'
这是我得到的结果:
员工姓名 | 字段值 |
---|---|
特里 | 讲师 |
特里 | 高级讲师 |
欧文 | 行政人员 |
我被困在如何结合上面的 3 个查询以获得我想要的结果,如下所示:
生效日期 | 员工姓名 | 标题 | 部门 |
---|---|---|---|
1992 年 1 月 1 日 | 特里 | 高级讲师 | LM |
1990 年 1 月 1 日 | 欧文 | 行政 | LM |
也许我的 JOIN 概念还不够,或者在这种情况下我必须使用其他一些 SQL 函数吗?
谢谢
诀窍是通过Effective Date
获取每个StaffName
和FieldType
的最后一条记录。 我们通过WITH TIES
与 window function row_number()
一起执行此操作
然后就变成了conditional aggregation
的小事
示例或dbFiddle
Select EffectiveDate=max(EffectiveDate)
,StaffName
,Title = max(case when FieldType='Title' then FieldValue end)
,Department = max(case when FieldType='Department' then FieldValue end)
From (
Select top 1 with ties *
From YourTable
Order By row_number() over (partition by StaffName,FieldType Order by EffectiveDate desc)
) A
Group By StaffName
结果
EffectiveDate StaffName Title Department
1990-01-01 Owen Administrator LM
1992-01-01 Terry Senior Instructor LM
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.