我想为每位员工获得最后的文凭:
SELECT * FROM (SELECT e.employeeid,afd.AdminFileId ,afd.Title,ss.Name,YearObtained,afd.CreateDate,
ROW_NUMBER() OVER (PARTITION BY afd.AdminFileId ORDER BY afd.CreateDate desc) AS rn
FROM AF_Degree afd
LEFT JOIN AF_AdminFile aaf ON afd.AdminFileId = aaf.AdminFileId
LEFT JOIN schools_School ss ON afd.SchoolId = ss.ID
LEFT JOIN employee e ON e.adminfileid=aaf.AdminFileId) AS D WHERE D.employeeid=109
以上查询的结果: EmployeeId = 109的情况:
employeeid AdminFileId Title School YearObtained CreateDate
107 149971 Intercambio universitario; Programa Erasmus ( meses) Universidad Politécnica de Cartagena 2008 2018-05-14 03:45:41.6436995
107 149971 Student exchange Umeå University 2008 2018-06-27 16:01:53.8213765
107 149971 Erasmus Program (12months) POLITECNICA CARTAGENA 2006 2018-06-27 16:01:53.8213765
EmployeeId = 139的情况:
employeeid AdminFileId Title School YearObtained CreateDate
139 145555 Electronic Business Engineering Czech University of Life Sciences Prague 2007 2018-05-14 03:45:41.6436995
139 145555 Entrepreneurship and Management Umeå University 2009 2015-06-23 17:30:31.3100000
139 145555 Ingeniería técnica en informática de gestión Czech University of Life Sciences Prague 2009 2015-06-23 17:30:31.3100000
对于EmoloyeeId = 109,预期结果是:
EmployeeId AdminFileId Title School YearObtained CreateDate
107 149971 Student exchange Umeå University 2008 2018-06-27 16:01:53.8213765
对于EmoloyeeId = 139,预期结果是:
EmployeeId AdminFileId Title
139 7198 Ingeniería técnica en informática de gestión Czech University of Life Sciences Prague 2009 2015-06-23 17:30:31.3100000
如何获得基于YearObtained和CreateDate为雇员获得的最新文凭,尤其是当我们在同一年拥有两个文凭并且具有相同的CreateDate时(如上述两种情况及其相关的预期输出)?>
答案 0 :(得分:2)
只需将WHERE d.rn = 1
添加到外部查询中即可。还可能需要将分区稍微更改为... ORDER BY YearObtained DESC, afd.CreateDate DESC)...
SELECT *
FROM (
SELECT e.employeeid,afd.AdminFileId ,afd.Title,ss.Name,YearObtained,afd.CreateDate,
ROW_NUMBER() OVER (PARTITION BY afd.AdminFileId ORDER BY afd.CreateDate desc) AS rn
FROM AF_Degree afd
LEFT JOIN AF_AdminFile aaf ON afd.AdminFileId = aaf.AdminFileId
LEFT JOIN schools_School ss ON afd.SchoolId = ss.ID
LEFT JOIN employee e ON e.adminfileid=aaf.AdminFileId
) AS D
WHERE d.rn = 1
那将使您排成一行。但是,如果YearObtained
和CreateDate
相同,则不能保证会得到哪条记录。您可能需要在分区的ORDER BY
中添加第三列,例如ID或唯一的内容。