1
回答
请教查询多人多条记录中每个人符合条件的最后一条记录的SQL
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

用的SQL Server2008数据库,表结构如图表结构

现在需要查询每个员工(对应EmployeeID)当前月以前创建的最后一条记录(根据CreateDate 如:张三有4、5、7、8月的记录,李四有1、2、3、5、8的记录,需要张三7月和李四5月的记录)

现在表中的数据:

我用GROUP BY能查出符合条件的员工ID和创建时间,SQL语句如下

SELECT EmployeeID,MAX(CreateDate) 
FROM officedba.BaseSalaryPercent WHERE ID NOT IN (
SELECT ID FROM officedba.BaseSalaryPercent 
GROUP BY ID,CreateDate HAVING 
DATEPART(yyyy,CreateDate) = DATEPART(yyyy,GETDATE()) AND DATEPART(mm,CreateDate) = DATEPART(mm,GETDATE())
) GROUP BY EmployeeID

得到的结果是

但现在想查出符合条件的整条记录该怎么写呢?麻烦高手指点一下~谢谢~

<无标签>
举报
SamH
发帖于5年前 1回/5K+阅
共有1个答案 最后回答: 5年前

琢磨了2个多小时弄出来了,多建了几条数据测试应该问题了

 

SELECT A.* FROM officedba.BaseSalaryPercent AS A 
INNER JOIN (
SELECT CompanyCD,EmployeeID,MAX(CreateDate) AS CreateDate 
FROM officedba.BaseSalaryPercent WHERE ID NOT IN (
SELECT ID FROM officedba.BaseSalaryPercent 
GROUP BY ID,CreateDate HAVING DATEPART(yyyy,CreateDate) = DATEPART(yyyy,GETDATE()) AND 
DATEPART(mm,CreateDate) = DATEPART(mm,GETDATE())
) GROUP BY EmployeeID,CompanyCD) AS B 
ON A.CompanyCD = B.CompanyCD AND 
A.EmployeeID = B.EmployeeID AND 
A.CreateDate = B.CreateDate

查询前的数据如下

查询后的结果如下

写的有点粗糙,不过能得到想要的结果了,如果有哪位朋友有更简单的方法,还请指教。。

顶部