Sql 具有联接的特定年份的最大值
我有两张桌子。键都是SID-连接在此键上 第一个表有教育数据。例如,SID,获得了YearQual和QualLevel的年度资格。每个SID可能有几行 第二个表包含事件数据,包括事件年份EventYear和SID 我需要找到的是今年的最高水平 我正在使用SQL Server 我已经编写了一个又一个查询,我可以得到与事件年无关的MAX QualLevel,或者多行显示所有资格级别>=事件年,而我只需要该年的MAXSql 具有联接的特定年份的最大值,sql,sql-server,Sql,Sql Server,我有两张桌子。键都是SID-连接在此键上 第一个表有教育数据。例如,SID,获得了YearQual和QualLevel的年度资格。每个SID可能有几行 第二个表包含事件数据,包括事件年份EventYear和SID 我需要找到的是今年的最高水平 我正在使用SQL Server 我已经编写了一个又一个查询,我可以得到与事件年无关的MAX QualLevel,或者多行显示所有资格级别>=事件年,而我只需要该年的MAX SELECT eventdata.S_ID, eventdata.eventyear
SELECT eventdata.S_ID, eventdata.eventyear,
max (education.qual_Level) as highqual
FROM education
left join eventdata
ON education.S_ID = eventdata.S_ID
WHERE education.YearQual<= eventyear
GROUP BY eventyear, qual_level, eventdata.S_ID
上面的代码给出了多行
我需要找到的是今年的最高水平
如果需要MAX QualLevel和EventYear,请不要在select和group by语句中包含eventdata.S_ID
由于同一事件年有多个S_ID,因此将获得重复记录
更改您的查询,如下所示
SELECT eventdata.eventyear,
max (education.qual_Level) as highqual
FROM education
left join eventdata
ON education.S_ID = eventdata.S_ID
WHERE education.YearQual<= eventdata.eventyear
GROUP BY eventdata.eventyear
您可以使用行号
这是一个很好的使用应用程序的地方:
select S_ID,eventyear,highqual from
(SELECT eventdata.S_ID, eventdata.eventyear,
education.qual_Level as highqual,
row_number()over(partition by eventyear order by education.qual_Level desc) rn
FROM education
left join eventdata
ON education.S_ID = eventdata.S_ID
WHERE education.YearQual<= eventyear
) t where t.rn=1
SELECT ed.*, e.qual_Level as highqual
FROM eventdata ed OUTER APPLY
(SELECT TOP (1) ed.*
FROM education e
WHERE e.S_ID = ed.S_ID AND
e.YearQual <= ed.eventyear
ORDER BY e.YearQual DESC
) ed;