Avatar billede soren_aakjaer Nybegynder
04. november 2010 - 21:42 Der er 11 kommentarer

Spørgsmål til overlappende tidsstempl beregning. (den god udfordring)

Hej,
Jeg sidder med en opgave i SQL, hvor jeg skal udregne den total effektive arbejdstid pr medarbejder + den gennemsnitlig behandlingstid pr medarbejder ud fra et dataset omkring en chat applikationen. 

Problemet er at data kan overlappe, da der kan chattes med flere på en gang. Mit dataset viser blot et start og et slut tidspunkt pr sag, hvilket betyder at jeg ikke bare kan udregne arbejdstiden + behandlingstiden ved blot at trække de to tidsstempler fra hinanden.

Mit data set kan eksempelvis se således ud

ID    Starttid    Sluttid    Medarbejder
ID1    08:10:21    08:12:33    X
ID2    08:11:12    08:14:12    X
ID3    08:10:11    08:17:13    X

Jeg har altså behov for at udregne den faktuelle behandlingstid for ID1, ID2 og ID3.

Håber det sidder som kan gennemskue løsningen på dette problem.
Avatar billede Syska Mester
04. november 2010 - 21:56 #1
Hvis de kan overlappe hinanden ? Hvordan vil du så have udregnet den effektive tid? er det den de hvor de ikke har haft en kunde opgave? Du må gerne define den ...

Den anden kan du jo bare tage de 3 kundesager og så devider med 3 ... eller hvad er problemet ?

mvh
Avatar billede Syska Mester
04. november 2010 - 22:06 #2
DECLARE @Start DATETIME = GETDATE();
DECLARE @End DATETIME = DATEADD(HOUR, 1, DATEADD(MI, 10, GETDATE()));

PRINT @Start;
PRINT @End;

SELECT DATEDIFF(MI, @Start, @End)

Giver 70 mins.
Avatar billede soren_aakjaer Nybegynder
04. november 2010 - 22:12 #3
Hej,

Det er ikke sikkert jeg formulerer mig klart.

Jeg har behov for at vide hvor lang tid den enkle medarbejder har brugt på den enkle sag. Det vil altså sige, at såfremt medarbejder arbejde på en anden sag mens den først stadig er åben skal denne tid modregnes.

Håber det giver mening
Avatar billede Syska Mester
04. november 2010 - 22:21 #4
Kan du ikke lige komme med et regne eksemple på hvad du regner med at få ud af overstående så ... lidt svært at gætte sig til.

Nemmere når man har nogle faktiske tal at gå efter ... så skal der nok kunne lave en SQL sætning som kan klare opgaven bagefter.

mvh
Avatar billede soren_aakjaer Nybegynder
04. november 2010 - 22:50 #5
Hej
Jamen det er faktisk problemet.... Det er nemt nok at se udregne at der er samlet brugt 0:12:14 min på opgaverne. Men eksempelvis så har chatten med ID2 foregået undervejs mens ID3 har været åben. Det vil altså sige, at ID3 behandlingstid sådanset ikke er 00:07:02 men istedet 00:04:02. Samtidig har ID1 været behandlet men ID3 var åben. Her skal vi således regne 10 sek yderelige fra, da resten af tiden er modregnet i ID2.

Er du med?

ID     Starttid     Sluttid     Medarbejder    Behandlingstid
ID1     08:10:21    08:12:33    X    00:02:12
ID2     08:11:12    08:14:12    X    00:03:00
ID3     08:10:11    08:17:13    X    00:07:02

SUM                                0:12:14
Avatar billede Syska Mester
04. november 2010 - 23:02 #6
Sagde du ikke lige overlappende tider skulle trækkes fra ?
Avatar billede Syska Mester
04. november 2010 - 23:08 #7
og derefter læser jeg så overstående forklaring ...

Måske bare mig der synes det er ulogisk at den skal trækkes fra den andens tid ... hvem siger ikke at ID3 har været effektiv tid.

Hvordan ser din table ud ? data typer?
Avatar billede mcb2001 Nybegynder
05. november 2010 - 07:39 #8
du kan ikke løse denne opgave i SQL.

Jeg vil anbefale dig at udlæse data i et eller andet programmeringssprog efter eget valg, og så bruge de if sætninger, løkker osv. det kræver.

Hvis du så går i stå, kan du oprette en ny tråd under det forum der hører til dit programmeringssprog.

Men lige kort. Du skal finde alle de tider der er overlappende. For hver skal du til dele en % del eller en brøkdel, så er der to der hedder f.eks.
08.10 - 08.12
08.11 - 08.14
Så er der et overlap på 1 minut, hvor dette ene minut deles med 30 sekunder per kunde, og resten er tiden unik for kunden.
Så du får en tid på første kunde der hedder:
2 minutter - 30 sekunder = 1min 30sec
og anden kunde:
3 minutter - 30 sekunder = 2min 30sec
Avatar billede soren_aakjaer Nybegynder
05. november 2010 - 07:50 #9
OK... Hvad gør jeg så egentlig hvis der er 3 chats åben på en gang?
Avatar billede mcb2001 Nybegynder
05. november 2010 - 08:12 #10
08.10-08.12 ->
(08.10-08.11)/2 + (08.11-08.12)/3

08.11-08.14 ->
(08.11-0812)/3 + (08.12-08.14)/2

08.09-08.15 ->
(08.09-08.10) + (08.10-08.11)/2 + (08.11-08.12)/3 + (08.12-08.14)/2 + (08.14-08.15)
Avatar billede Syska Mester
05. november 2010 - 09:31 #11
#mbc
Nu er det jo ikke sådan han beskriver sit problem.

Sidste kunde i køen skal ikke betale hvis der var en anden kunde i gang da der kom en ny kunde. Han har ikke skrevet tiden skal deles mellem de kunder som er der på samme tid.

Men det andet burde også kunne lade sig gøre i SQL, men der mangler stadig for mange info til at jeg kan sige det præcist.

Men der er ingen tvivl om det ville være nemmere i et programmerings sprog ... da databaser er til data og ikke logik.

#soren_aakjaer
Men hvorfor regne det ud på den måde, nu bliver jeg nød til at sprøge? Er lidt nysgerig omkring det ....

mvh
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester