[mysql] Week 1 + jaar klopt niet

Pagina: 1
Acties:

  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
Ik heb een tabel die statistieken bijhoudt. de tabel houdt voor pagina1, pagina2, pagina3, etc, de hits bij. iedere kolom (op de datum kolom na) is dus een pagina, en iedere rij is een dag.

Nu wil hier uit een resultaten pagina uit maken waarin de statistieken gegroupeerd zijn op week (per dag en per maand lukt al). Daarvoor heb ik onderstaande query opgesteld. Hierbij heb ik alleen het probleem dat 29/31 december 2003 behoren tot week 1 2004. Maar mijn select geeft week 1 van jaar 2003.

Hoe zorg ik er dus voor dat mySQL de week baseert op het jaar?

code:
1
2
3
4
5
SELECT SUM(pagina1) AS pagina1, SUM(pagina2) AS pagina2, etc,
CONCAT(WEEK(logdate, 3), YEAR(logdate)) AS dateformat,
DATE_FORMAT(logdate, 'week %v %Y -- %b %D %Y') AS datedisplay 
FROM tabel 
GROUP BY dateformat

zonder de GROUP BY clausule is het resultaat als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+-------------------------------+ 
| datedisplay                   | 
+-------------------------------+ 
| week 02 2004 -- Jan 6th 2004  | 
| week 02 2004 -- Jan 5th 2004  | 
| week 01 2004 -- Jan 4th 2004  | 
| week 01 2004 -- Jan 3rd 2004  | 
| week 01 2004 -- Jan 2nd 2004  | 
| week 01 2004 -- Jan 1st 2004  | 
| week 01 2003 -- Dec 31st 2003 | 
| week 01 2003 -- Dec 30th 2003 | 
| week 01 2003 -- Dec 29th 2003 | 
| week 52 2003 -- Dec 28th 2003 | 
| week 52 2003 -- Dec 27th 2003 | 
+-------------------------------+

[ Voor 17% gewijzigd door Mark Wegener op 27-02-2004 22:04 ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Is het een idee om het weeknummer en het jaar elk in een aparte kolom te zetten :?

en anders:

code:
1
2
SELECT substring(lpad(dateformat,6,0) from 3,4) as year    
                     ....... GROUP BY year


})

[ Voor 47% gewijzigd door beetle71 op 27-02-2004 21:47 ]


  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
nee, niet echt, ik gebruik die dateformat kolom uitsluitend om unieke weken te krijgen (dus dat week 52 2003 iets anders is dan week 52 2004).

bovendien zie ik niet helemaal het punt er van in...

-edit-
waarom group by year? ik wil ze per week :)

[ Voor 13% gewijzigd door Mark Wegener op 27-02-2004 21:50 ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Martin.Duane schreef op 27 februari 2004 @ 21:48:
nee, niet echt, ik gebruik die dateformat kolom uitsluitend om unieke weken te krijgen (dus dat week 52 2003 iets anders is dan week 52 2004).

bovendien zie ik niet helemaal het punt er van in...
Als je een kolom maakt voor de week en een voor het jaar dan kun je toch een unique constraint aanleggen over die twee
[code]
ALTER TABLE `tablename` ADD UNIQUE weekvanjaar (week,jaar)
[/code]
Dat betekend dat er dan geen 2 keer de combi week 1 jaar 2004
mag voorkomen.

Je kunt dan daarna heel simpel zeggen
[code]
WHERE year=2004 group by week
[/code]


edit:

Aaaaahh, sorry, FORGET IT ALL |:(

[ Voor 32% gewijzigd door beetle71 op 27-02-2004 22:03 ]


  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
sorry, vraag was beetje slecht gesteld :X ik heb het nu beetje veranderd. het gaat er dus om dat statistieken uit de tabel getrokken moeten worden en de tabel niet verandert mag worden.

het probleem is dat week 1 2004, in twee delen wordt gehakt te weten 3 dagen in 2003 (wat dus week 1 2003 wordt) en 4 dagen in 2004 (wat dus de correcte week 1 2004 wordt).

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

groeperen op week:
select sum(...), YEAR(logdate) as year, WEEK(logdate) as week
..
group by year, week

let op de volgorde en ik zou je dateformat gewoon weglaten ;)
[edit]
ah, je stelt nou ineens een andere vraag :P

[ Voor 14% gewijzigd door ACM op 27-02-2004 22:13 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat je kan doen is bijvoorbeeld groeperen op de GETDAYS-waarde, ala:

SELECT GETDAYS(logdate) - DAYOFWEEK(logdate) as weekstartday
group by weekstartday

  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
wat is GETDAYS? ik kan er niets over vinden in de manual.

-edit- sorry dat ik de vraag veranderd, hij was beetje slecht gesteld

[ Voor 40% gewijzigd door Mark Wegener op 27-02-2004 22:27 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

to_days dan, wist het niet meer uit mijn hoofd hoe ie heette, maar als je de manual page had geopend had ie je gelijk op moeten vallen ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

En als je dan toch op die pagina bent, kijk dan gelijk naar de functie WEEK, en zie dat ie verschillende modii kent :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
ACM: het werkt idd wel ten aanzien van week 1, maar nu heb ik 2x week 51 2003 en geen week 9 2004 :?

.oisyn: ik ken die WEEK modi ja, je kan er alleen niets mee.
Pagina: 1