Odejmowanie przerwy od czasu operacji

Odejmowanie przerwy od czasu operacji
ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
1

Mam problem aktualnie mam zapytanie SQL:

Kopiuj
SELECT 
	ROW_NUMBER() OVER (ORDER BY pac.Create_DT) Lp,
	pac.UserName,
	 pac.StartDT,
	 pac.EndDT,
	 pac.OperationTypeName,
	 pac.Qty,
datediff(MINUTE,   pac.StartDT,pac.EndDT) as 'CZAS',
		 pac.ControlDataTypeName,
	 pac.ControlDataRefRemarks,
	 pac.Points	
	FROM rep.Productivity(NOLOCK) pac
	JOIN dbo.Users(NOLOCK) u
		ON u.IdUser = pac.UserId
		where pac.OperationTypeName like '%Kompletacja%' and CAST(pac.StartDT as date) =  CAST(GETDATE() as date)
	ORDER BY pac.Create_DT

Które zwraca mi Czas start i czas stop, i w kolumnie 'CZAS' wyliczam różnice co daje mi czas ile trwała operacja.
Ale tu pojawia się problem bo pracownicy idąc na przerwę nie mogą zawiesić operacji i czas przerwy również się nalicza:

Kopiuj
StartDT	EndDT	OperationTypeName	Qty	CZAS	
2024-10-03 02:00:18.500	2024-10-03 02:49:25.980	Kompletacja export	8.00	49	Przerwa - 20 minut
2024-10-03 02:00:18.500	2024-10-03 02:49:25.980	Kompletacja export	8.00	49	Przerwa - 20 minut
2024-10-03 02:36:24.913	2024-10-03 02:52:56.787	Kompletacja export	3.00	16	OK
2024-10-03 02:40:51.010	2024-10-03 02:54:24.010	Kompletacja export	3.00	14	OK
2024-10-03 02:42:49.137	2024-10-03 03:04:40.857	Kompletacja export	3.00	22	OK

screenshot-20241003090343.png

Tak jak widać dwa pierwsze wpisy powinny zostać skorygowane o czas przerwy czyli od 02:00:00 do 02:20:00 jest przerwa. Później 10:00:00 do 10:20:00 i 18:00:00 do 18:20:00
Więc gdy wpis zostanie zarejestrowany w czasie przerwy powinien zostać skorygowane o czas przerwy.
Macie jakieś pomysły jak to zrobić w prosty sposób?

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 342
2

A ty chcesz wyliczyć czas pracy nad operacją, czas pracy pracownika? Czy może kilku pracowników pracować nad jedna operacją?

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
1

Tak chcę obliczyć czas pracy na operacji tak jak widać w wyniku tylko w czasie przerwy odejmować tą przerwę, więc tak jak widzisz pierwszy rekord pokazuje że operacja trwała 49 min ale tam była akurat przerwa więc czas przerwy powinien być odjęty co daje wynik 29 min

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 342
2

No to policz przerwy, policz dlugos operacji i odejmij tam gdzie trzeba. Może Ci się przydać klauzura with

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.