Jeg tror, du vil have logik som følgende, hvor du tjekker, om der findes en afsluttende rekord for hver åbningsrecord. Det ser dog ikke ud til at være muligt at få dine forventede resultater ved at bruge de angivne data.
DECLARE @emp_swipe_rec table (EMPLOYEE_ID int, TASK_ID int, SWIPE_TYPE char(1), SWIPE_IN_OUT_TIME datetime2);
DECLARE @Now datetime2 = '2021-03-07 16:40:00.000'; --sysdatetime();
INSERT INTO @emp_swipe_rec (EMPLOYEE_ID, TASK_ID, SWIPE_TYPE, SWIPE_IN_OUT_TIME)
VALUES
(1,1,'I','2021-03-07 08:00:00.000'),
(2,2,'I','2021-03-07 08:00:00.000'),
(1,1,'O','2021-03-07 15:00:00.000'),
(1,3,'I','2021-03-07 16:00:00.000');
SELECT I.EMPLOYEE_ID, I.TASK_ID
, DATEDIFF(MINUTE, I.SWIPE_IN_OUT_TIME, @Now) AS TimeSpent
FROM @emp_swipe_rec I
WHERE SWIPE_TYPE = 'I'
-- Rule out any where a closing record in the future exists
AND NOT EXISTS (
SELECT 1
FROM @emp_swipe_rec O
WHERE O.EMPLOYEE_ID = I.EMPLOYEE_ID
AND O.TASK_ID = I.TASK_ID
AND SWIPE_TYPE = 'O'
AND O.SWIPE_IN_OUT_TIME > I.SWIPE_IN_OUT_TIME
);
Returnerer følgende ved hjælp af et tidsstempel, der giver 40 minutter - men usikker på, hvordan du kom frem til 130 minutter:
EMPLOYEE_ID | TASK_ID | Tid brugt |
---|---|---|
2 | 2 | 520 |
1 | 3 | 40 |
Bemærk venligst til fremtidig reference, hvis du giver dig eksempeldata på denne måde (DDL+DML), gør du ikke kun dit spørgsmål klarere, du gør det også meget nemmere for folk at svare