13. december 2004 - 12:57Der 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.
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
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
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.