Ale*_*x P 3 sql t-sql sql-server
我很难根据最近的日期更新数据库中的记录,并且正在寻找一些指导.顺便说一下,我是SQL新手.
作为背景,我有一个使用SQL Express的Windows窗体应用程序,并使用ADO.NET与数据库进行交互.该应用程序旨在使用户能够跟踪员工出席必须定期参加的各种课程(例如,每6个月,每年等).例如,他们可以撤回数据以查看员工上次参加特定课程的时间,并在员工最近完成课程时更新出勤日期.
我有三个数据表:
对于任何给定的课程,员工将有一个出勤历史,即如果每年需要参加该课程,那么他们将拥有与他们在公司一样多年的记录.
我希望能够根据最近的出勤日期更新给定员工的"评论"字段和给定的课程.这是什么'正确'的SQL语法?
我尝试了很多东西(如下所示),但无法让它工作:
UPDATE AttendanceRecordsTable
SET Comments = @Comments
WHERE AttendanceRecordsTable.EmployeeID = (SELECT EmployeeDetailsTable.EmployeeID FROM EmployeeDetailsTable WHERE (EmployeeDetailsTable.LastName =@ParameterLastName AND EmployeeDetailsTable.FirstName =@ParameterFirstName)
AND AttendanceRecordsTable.CourseID = (SELECT CourseDetailsTable.CourseID FROM CourseDetailsTable WHERE CourseDetailsTable.CourseName =@CourseName))
GROUP BY MAX(AttendanceRecordsTable.LastDate)
Run Code Online (Sandbox Code Playgroud)
经过大量的谷歌搜索,我发现MAX是一个聚合函数,所以我需要使用GROUP BY.我也尝试过使用HAVING关键字但没有成功.
任何人都能指出我正确的方向吗?基于最近日期更新数据库记录的"常规"语法是什么?
那么你想更新AttendantsRecordsTable
,并将评论设置CourseDetailsTable
为每个员工最近的评论?
UPDATE
dbo.AttendanceRecordsTable
SET
Comments = @Comments
FROM
CourseDetailsTable cd
INNER JOIN
Employee e ON e.EmployeeID = AttendanceRecordTable.EmployeeID
WHERE
e.LastName = @LastName
AND e.FirstName = @FirstName
AND cd.CourseName = @CourseName
AND AttendanceRecordsTable.CourseID = cd.CourseID
AND AttendanceRecordsTable.LastDate =
(SELECT MAX(LastDate)
FROM AttendanceRecordsTable a
WHERE a.EmployeeID = e.EmployeeID
AND a.CourseID = cd.CourseID)
Run Code Online (Sandbox Code Playgroud)
我认为这样的事情应该有效.
您基本上需要在要更新的AttendanceRecordTable与Employee和CourseDetailsTable表之间进行连接.对于这两个,您已经定义了某些参数来分别选择一行,然后您需要确保仅AttendanceRecordTable
通过确保它是表的MAX(LastDate)来更新您执行的最后一个条目.
这里的子选择:
(SELECT MAX(LastDate)
FROM AttendanceRecordsTable a
WHERE a.EmployeeID = e.EmployeeID AND a.CourseID = cd.CourseID)
Run Code Online (Sandbox Code Playgroud)
将根据给定employee()和给定课程()的选择选择LastDate
条目的MAX(最后).AttendanceRecordsTable
e.EmployeeID
cd.CourseID
将其与选择配对,以按名字和姓氏选择单个员工(当然,只有John Miller
在员工表中永远不会有两个员工时才有效).您还可以通过课程名称选择课程,因此也必须是唯一的 - 否则您将在课程表中获得多个匹配.
渣
归档时间: |
|
查看次数: |
15423 次 |
最近记录: |