Avatar billede challengers Nybegynder
13. december 2004 - 12:57 Der er 9 kommentarer og
1 løsning

Gruppering på tidsinterval

Hej Eksperter!

Jeg sidder med en logtabel, der logger brugernes login og logud tid. En række i loggen ser sådan ud:

brugerid    logintid    logouttid

Nu vil jeg så gerne vide, om jeg kan lave én forespørgsel, der viser antal brugere, der er logget ind i forskellige tidsintervaller. F.eks. vil jeg gerne lave en forespørgsel, der viser antal brugere, der er logget ind time for time.

Dvs.:

Interval Antal

00-01    2
01-02    0
03-04    0
04-05    1
05-06    4
06-07    7
07-08    20
08-09    200
osv......

Det skal laves i én forespørgsel, dvs. uden at skulle behandle data i et programmeringssprog bagefter...
Avatar billede dsj Nybegynder
13. december 2004 - 13:00 #1
Hvad vil du gruppere på? År, måned, dato, tid eller en kombination?
Avatar billede challengers Nybegynder
13. december 2004 - 15:37 #2
Jeg vil gerne gruppere på kolonnen "Interval" som er på formatet dd-MM-yyyy hh:mm:ss
Avatar billede dsj Nybegynder
13. december 2004 - 15:47 #3
Hvis du vil gruppere på en datetime-kolonne, har du kun mulighed for at gruppere dele af datotids-stemplerne, f.eks.:

SELECT COUNT(brugerid) AS amount
FROM <tabel>
GROUP BY YEAR(logintid), MONTH(logintid), DAY(logintid)

Som vil tælle antallet af brugere, der er logget ind pr. dag. Hvis du vil finde logins pr. time, hedder den:

GROUP BY YEAR(logintid), MONTH(logintid), DAY(logintid), HOUR(logintid)

Er det hvad du søger?
Avatar billede challengers Nybegynder
13. december 2004 - 16:04 #4
Tak for svaret. Kigger lige på det i morgen...
Avatar billede challengers Nybegynder
14. december 2004 - 08:09 #5
Den kan ikke genkende metoden 'HOUR'....
Avatar billede challengers Nybegynder
14. december 2004 - 08:23 #6
For at gruppere på time, kan man bruge metoden DATEPART sådan her:
DATEPART(hh, logintid)
Avatar billede challengers Nybegynder
14. december 2004 - 08:29 #7
Nu sidder jeg så og vil gerne have intervaller på ½ time.
Hvordan gør jeg det?
Avatar billede challengers Nybegynder
14. december 2004 - 08:44 #8
Accepterer dit svar. Håber, du vil hjælpe med mit næste spørgsmål...
Avatar billede dsj Nybegynder
15. december 2004 - 11:12 #9
Ja, det er korrekt at DATEPART kan bruges. DATEPART(yyyy, logintid) gør også det samme som YEAR(logintid).

Du får dog et problem, hvis du vil gruppere på hver halve time, da der ikke i et datotids-stempel er værdier, som angiver halve timer. GROUP BY grupperer som sagt
Avatar billede dsj Nybegynder
15. december 2004 - 11:28 #10
ARGH - ramte 'Send' ved et uheld :-)

GROUP BY gruppperer som sagt på ens værdier, hvilket med et datotids-stempel giver mulighed for at gruppere på de dele, et datotids-stempel indeholder. Med et datotids-stempel har du groft sagt grupperingsmuligheder på de dele, som DATEPART kan udlede af en datotid.

Hvis du absolut vil eller har brug for intervaller på halve timer, må du tilføje en ekstra int-kolonne til din log-tabel, hvor f.eks. værdien '1' angiver den første halvdel af en time, og '2' den anden halvdel af en time. Du kan også bruge værdierne 1-4, og dermed åbne for muligheden for kvarter-intervaller. Om du så skal skrive 1, 2, 3 eller 4 i den nye kolonne (lad os kalde den "newcolumn"), kan du bestemme ud fra følgende:

DECLARE @minute int, @value int
SELECT @minute = DATEPART(n, GETDATE())

SELECT @value = CASE
  WHEN @minute < 15 THEN 1
  WHEN @minute < 30 THEN 2
  WHEN @minute < 45 THEN 3
  WHEN @minute < 60 THEN 4
END

Med den ekstra int-kolonne, er det nu muligt at gruppere:

GROUP BY DATEPART(yyyy, logintid), DATEPART(m, logintid), DATEPART(d, logintid), DATEPART(hh, logintid), newcolumn
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