sql >> Databáze >  >> RDS >> Sqlserver

Jak vybrat pouze swipe-in ​​uživatele z tabulky, která má všechny swipe záznamy

Myslím, že chcete logiku, jako je následující, kde zkontrolujete, zda pro každý otevírací záznam existuje závěrečný záznam. Zdá se však, že pomocí poskytnutých dat nelze dosáhnout očekávaných výsledků.

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
);

Vrátí následující pomocí časového razítka, které dává 40 minut – ale nejste si jisti, jak jste ke 130 minutám přišli:

ID EMPLOYEE_ID TASK_ID Čas strávený
2 2 520
1 3 40

Vezměte prosím na vědomí pro budoucí použití, pokud vám poskytnete vzorová data tímto způsobem (DDL+DML), nejen že svou otázku vyjasníte, ale také lidem mnohem snáze odpovídáte




  1. SQL Server 2005 - Pivoting Data bez součtu / počtu a dynamického seznamu hodnot

  2. MySQL:Je možné vytvořit dotaz, který vyhodnocuje data z různých záznamů?

  3. Připojení k serveru Oracle19C pomocí klienta Oracle11g

  4. Multpilcation Aggregate na SQL Server