Avatar billede trendt Nybegynder
20. januar 2009 - 11:09 Der er 4 kommentarer og
1 løsning

COUNT() sammen med ikke aggregate'ede felter i ét udtræk

Hej :)

Det er muligvis et lidt dumt spørgsmål men ... here goes:

Jeg har en tabel med følgende felter:
UID1(int), UID2(int), dato(datetime)

Det er en tabel der bruges til at føre statestik med antal besøgende på et par hjemmesider. UID1 er hvilken hjemmeside og UID2 er hvilken side (en hjemmeside kan bestå af flere enkelte sider) samt en datetime for besøget.

Indhold kunne således se sådan ud:
UID1, UID2, dato
1, 1, 07-11-2007 12:52:21
1, 9, 07-11-2007 12:49:36
1, 1, 07-11-2007 13:52:21
2, 19, 07-11-2007 10:52:21

*bemærk at der er 2 besøg på siden med UID2 = 1

Det jeg gerne vil have trukket ud er en COUNT på UID2 (UID2 er unikt for alle sider) med dato uden tid samt UID1. For at følge eksemplet, ville output se sådan ud:
UID1, UID2, ANTALBESØG, DATO
1, 1, 2, 07-11-2007
1, 9, 1, 07-11-2007
2, 19, 1, 07-11-2007

Hvordan kan jeg klare det?

Det tætteste jeg er kommet på er noget i stil med (virker naturligvis ikke!):

SELECT    UID1, UID2, COUNT(UID2) AS ANTALBESØG, DATEADD(day, DATEDIFF(day, '20000101', DATO), '20000101') as DATO
FROM    CGADS_Statistics_Articles
WHERE    StartDateTime > convert(datetime, '11/07/2007') AND StartDateTime < convert(datetime, '11/07/2007 23:59:59')
GROUP BY UID2, UID1, DATO
ORDER BY UID2

Problemet med det jeg har lavet er at den ikke gruppere efter UID2. Der kommer således bare til at stå 1 udfor alle ANTALBESØG. Men den kræver at jeg laver GROUPE BY UID1 og DATO for at ville validere queryen.

Jeg må havde overset et eller andet basalt her :-)
Avatar billede aaberg Nybegynder
20. januar 2009 - 11:50 #1
Prøv noget lignende dette (ikke testet)

SELECT UID1, UID2, Count(UID2) as ANTALLBESØG, CONVERT(VARCHAR, dato, 112) dato
FROM CHADS_Statistics_Articles
GROUP BY UID1, UID2, CONVERT(VARCHAR, dato, 112)
Avatar billede aaberg Nybegynder
20. januar 2009 - 11:59 #2
Hvis du vil have datoen formateret lidt flottere, kan du bruge en anden format-standard. Brug f.eks. 105 for at vise datoen som 07-11-2007

SELECT UID1, UID2, Count(UID2) as ANTALLBESØG, CONVERT(VARCHAR, dato, 105) dato
FROM CGADS_Statistics_Articles
GROUP BY UID1, UID2, CONVERT(VARCHAR, dato, 105)
Avatar billede aaberg Nybegynder
20. januar 2009 - 11:59 #3
Du finder de forskellige dato-formaterings muligheder her:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
Avatar billede trendt Nybegynder
20. januar 2009 - 14:17 #4
Super snedig med den dato :-) Mange tak for hjælpen - så mangler jeg bare at finde ud af hvordan man giver point.
Avatar billede aaberg Nybegynder
20. januar 2009 - 14:25 #5
Jeg skal først lægge et svar. Det gør jeg nu. Så markere du mit navn i listen til venstre, og trykker på "Accepter".
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