Avatar billede michael_c Nybegynder
27. september 2008 - 10:47 Der er 5 kommentarer

Brugen af group by

Hej
Jeg er lidt i tvivl om hvordan jeg skal bruge group by. Jeg har en logfil som indeholder producerede annoncer pr dag, og jeg vil gerne tælle produktiviteten. Jeg vil maximalt kun tillade at man kan producere den samme annonce en gang pr. dag, hvilket vil sige at jeg er nødt til at bruge group by på dagniveau, for at kunne tælle unikke produktionsnr.

Mit problem består i, at hvis jeg f.eks vil lave statistik på en måned, vil jeg gerne have uger som mindste blok - altså produktiviteten pr. måned delt på ugen.

Men hvis jeg bruger ugen som gruop by element, betyder det vel at den samme annonce kun bliver talt en gang på den uge, selv om man måske har lavet den tre gange?

Kan man klare dette på en gang i sql, eller skal man lave arrays og f.eks. lave en group by pr. dag, og så ellers fordele resultater på ugen ved f.eks. brugen af array.

Håber det er klart hvad jeg ønsker at opnå?

/michael
Avatar billede arne_v Ekspert
27. september 2008 - 12:31 #1
utestet:

SELECT TO_CHAR(TO_DATE(md,'YYYYMMDD'),'YYIW'),SUM(n)
FROM (SELECT TO_CHAR(modifieddate,'YYYYMMDD') AS md,COUNT(*) AS n
FROM dintabel
GROUP BY TO_CHAR(modifieddate,'YYYYMMDD')) x
GROUP BY TO_CHAR(TO_DATE(md,'YYYYMMDD'),'YYIW')
Avatar billede arne_v Ekspert
27. september 2008 - 13:45 #2
hm - nok snarere:

SELECT TO_CHAR(TO_DATE(md,'YYYYMMDD'),'YYIW'),SUM(n)
FROM (SELECT TO_CHAR(modifieddate,'YYYYMMDD') AS md,1 AS n
FROM dintabel
GROUP BY TO_CHAR(modifieddate,'YYYYMMDD')) x
GROUP BY TO_CHAR(TO_DATE(md,'YYYYMMDD'),'YYIW')
Avatar billede michael_c Nybegynder
27. september 2008 - 17:10 #3
Hej Arne
Jeg kan ikke rigtigt gennemskue dit første svar, har selv prøvet med følgende:

select modifiedby,to_char(modifieddate,'ww'),count(productionnumber) from adcreation_log where statuscode='7' group by modifiedby,to_char(modifieddate,'ww')

Det giver jo antal svar pr. uge, problemet er blot at de gerne må lave annoncen flere gange i løbet af ugen, og hvis jeg sætter to_char(modifieddate,'yymmdd') på i gruppefunktionen for jeg mange rækker med uge, som jeg så skal summe i php, med mindre jeg kan løse det i en sql sætning

/michael
Avatar billede arne_v Ekspert
29. september 2008 - 04:06 #4
Hvad med:

SELECT modifiedby,TO_CHAR(modifieddate,'YYIW'),COUNT(DISTINCT TO_CHAR(modifieddate,'YYMMDD'))
FROM adcreation_log
WHERE statuscode='7'
GROUP BY modifiedby,TO_CHAR(modifieddate,'YYIW')
Avatar billede arne_v Ekspert
25. oktober 2008 - 23:06 #5
OK ?
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