我有两个桌子。两者中的Key
均为SID
-join
在此key
上
第一个表具有教育数据。例如SID
,获得的年份资格(YearQual
)和QualLevel
。每个rows
可能有几个SID
第二个表包含event data
在内。活动的年份(EventYear
和SID
我需要找到EventYear的MAX
QualLevel
。
我正在使用SQL Server。
我在query
之后写了query
,可以得到MAX
QualLevel
(与event year
无关)或显示所有{{ 1}}> = qualification levels
,而我只想在当年获得event year
。
MAX
上面的代码给出了多行
答案 0 :(得分:1)
我需要找到EventYear的MAX QualLevel。
如果要使用MAX
QualLevel
和EventYear
,请不要在eventdata.S_ID
和select
语句中包含group by
。
由于同一S_ID
有多个eventyear
,因此您将获得重复的记录。
按如下所示更改查询。
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
答案 1 :(得分:0)
您可以使用row_number()
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
答案 2 :(得分:0)
这是使用apply
的好地方:
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;