如果我有两个带有列的表,如下所示。我想根据该班次内扫描的最早和最晚时间填写ActualStart
和ActualEnd
次。
有没有办法在linq中执行此操作或基于set的方式在sql中执行此操作?
目前我打算使用光标并浏览UsersShifts中的每一行,以便在该用户的转变中获得最早和最新的指纹扫描时间,并将其更新为ActualStart
和ActualEnd
列
UsersShifts
FingerprintScan
答案 0 :(得分:2)
只需将时间约束添加到JOIN
:
SELECT
us.UsersShiftsId,
us.UserId,
us.ShiftStart,
us.ShiftEnd,
MIN(fs.ScannedTime) ActualStart,
MAX(fs.ScannedTime) ActualEnd
FROM UsersShifts us
LEFT JOIN FingerprintScan fs
ON us.UserId = fs.UserId
AND fs.ScannedTime BETWEEN us.ShiftStart AND us.ShiftEnd
GROUP BY
us.UsersShiftsId,
us.UserId,
us.ShiftStart,
us.ShiftEnd