加入后特定年份的最大值

时间:2019-03-24 08:17:18

标签: sql sql-server

我有两个桌子。两者中的Key均为SID-join在此key上 第一个表具有教育数据。例如SID,获得的年份资格(YearQual)和QualLevel。每个rows可能有几个SID

第二个表包含event data在内。活动的年份(EventYearSID

我需要找到EventYear的MAX QualLevel

我正在使用SQL Server。

我在query之后写了query,可以得到MAX QualLevel(与event year无关)或显示所有{{ 1}}> = qualification levels,而我只想在当年获得event year

MAX

上面的代码给出了多行

3 个答案:

答案 0 :(得分:1)

  

我需要找到EventYear的MAX QualLevel。

如果要使用MAX QualLevelEventYear,请不要在eventdata.S_IDselect语句中包含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;