Tidsberegning med med automatisk fratræk af pauser
Hejsa
Er ved at lave noget dataopsamling fra en produktion. Databasen køre sådan set, men vil gerne at den selv kan trække pauserne fra. Er det ikke miligt at lave det?
SELECT Tabel1.start, Tabel1.slut, DateDiff("n",[start],[slut]) AS Udtryk1, Tabel1.pausestart, Tabel1.pauseslut, DateDiff("n",[pausestart],[pauseslut]) AS Udtryk2, ([udtryk1]-[udtryk2]) AS Udtryk3 FROM Tabel1;
mugs: Tak for db'erne. Det var bare ikke helt det jeg mente, med med automatisk.
Vi har to pauser på en dag. en kl 9-9.15 og en kl 12-12.20. Det jeg søgte er hvis de pauser indgår i arbejdstiden, f.eks hvis et arbejde er fra kl 7.00 til 13.15. Så er der jo 35 min pause i. Så var planen at den selv skulle trække de 35 min fra, hvis de indgik i arbejdstiden. Pauserne er altid faste og skal kun trækkes fra hvis de ingår i arbejdstiden. Håber det er noget i eksperter kan hjælpe med.
Jeg faldt tilfældigt over denne lidt ældre "opgave", og da den ikke ser ud til endnu at være løst til din tilfredsstillelse, vil jeg give mit bidrag.
Min "forsøgsopstilling" består af to tabeller:
Arbejdsopgaver: Id Dato Betegnelse Start Slut 1 11-06-2008 xxxx-1 07:00:00 10:20:00 2 11-06-2008 xxxx-2 10:21:00 12:30:00 3 11-06-2008 xxxx-3 12:31:00 14:30:00 4 12-06-2008 yyy 08:00:00 12:05:00
Pauser: Id Pause Start Slut 1 Formiddagspause 09:00:00 09:15:00 2 Middagspause 12:00:00 12:20:00
På grundlag af disse to tabeller (som måske, måske ikke stemmer overens med dine egne tabeller) har jeg lavet en forespørgsel, som viser det antal effektive arbejdsminutter, hver enkelt arbejdsopgave involverer:
SELECT a.Id, a.Dato, a.Betegnelse, a.Start, a.Slut, DateDiff("n",a.Start,a.Slut) AS Arbejdsminutter, SUM(Nz(DateDiff("n",IIf(p.Start<a.Start,a.start,p.start),IIf(p.slut>a.Slut,a.slut,p.slut)),0)) AS Pauseminutter, Arbejdsminutter-Pauseminutter AS [Effektive arbejdsminutter] FROM Arbejdsopgaver AS a LEFT JOIN Pauser AS p ON (a.start between p.start and p.slut) or (a.slut between p.start and p.slut) or (a.start<=p.start and a.slut >=p.start) GROUP BY a.Id, a.Dato, a.Betegnelse, a.Start, a.Slut, DateDiff("n",a.Start,a.Slut);
Med de data jeg har indsat i de to tabeller, giver det følgende output:
Jeg håber det var det resultat du ønskede at komme frem til.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.