"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
1
| select count(distinct (convert(varchar(10), datum,105) ) ) from ... |
Oops! Google Chrome could not find www.rijks%20museum.nl
[ Voor 61% gewijzigd door Gé Brander op 06-12-2005 20:11 ]
Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ik ken MySQL niet, maar is er een LEFT functie? Dan is met elke eerste 10 karakters toch een unieke combinatie te maken? Dan heb je toch niets met 1-31, 1-12 te maken in verschillende jaren?Reveller schreef op dinsdag 06 december 2005 @ 20:31:
Ik gebruik overigens MySQL. Ik vraag mij af of bovenstaande manieren werken, omdat de dagen 1 t/m 31 in 12 verschillende maanden in meerdere jaren voorkomen...
Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
hmm. Dat lees ik nergens, of ik begrijp het verkeerd.kenneth schreef op dinsdag 06 december 2005 @ 20:40:
Dan neem je ook jaar mee, en dat is niet de bedoeling.
Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!
Volgens mij wel, hij wil gewoon unieke dagen.kenneth schreef op dinsdag 06 december 2005 @ 20:40:
Dan neem je ook jaar mee, en dat is niet de bedoeling.
In MySQL kun je dus de date functie gebruiken. DATE(een_datum_tijd) geeft alleen de datum, zonder de tijd.In combinatie met mijn eerste voorbeeld moet je er wel mee komen denk ik.
Oops! Google Chrome could not find www.rijks%20museum.nl
Hieruit (en uit de testgegevens) trek ik de conclusie dat het jaar irrelevant is: 2003-11-04 en 2004-11-04 tellen als dezelfde dag.Reveller schreef op dinsdag 06 december 2005 @ 20:31:
Ik gebruik overigens MySQL. Ik vraag mij af of bovenstaande manieren werken, omdat de dagen 1 t/m 31 in 12 verschillende maanden in meerdere jaren voorkomen...
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Een unieke dag is een unieke dag, en niet een dag die in meerdere jaren voorkomt.
[ Voor 28% gewijzigd door Gé Brander op 06-12-2005 20:47 ]
Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!
Dat is volgens mij omdat hij twijfelt of DAYOFMONTH wel de goede functie is, maar dit blijft een beetje gokwerk;kenneth schreef op dinsdag 06 december 2005 @ 20:45:
[...]
Hieruit (en uit de testgegevens) trek ik de conclusie dat het jaar irrelevant is: 2003-11-04 en 2004-11-04 tellen als dezelfde dag.
@TS: 2004-12-05 en 2005-12-05, moet dat als 1 of als 2 geteld worden?
Oops! Google Chrome could not find www.rijks%20museum.nl
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Je hebt gelijk, ik had niet gezien dat 4 november in zowel 2003 als 2004 in het voorbeeld stondkenneth schreef op dinsdag 06 december 2005 @ 20:51:
Kijk naar de testset, en zijn aanname dat er zes uit moet komen ... dat kan alleen als je 4 november als 1 dag telt.
Oops! Google Chrome could not find www.rijks%20museum.nl
1
| SELECT COUNT(DISTINCT(DATE_FORMAT(created,"%c-%e"))) AS [Aantal unieke dagen] FROM stats |
Unieke dagen zijn unieke dagen, dus het jaar speelt wel degelijk een rol ... als TS enkel het huidige jaar wil, kan hij de query aanpassen als volgt (analoog voor jaar en/ofmaand):
1
2
| SELECT COUNT(DISTINCT(DATE_FORMAT(created,"%c-%e"))) AS [Aantal unieke dagen] FROM stats WHERE YEAR(created)=intJaar |
(intJaar is een integer variabele die het gewenste jaar bevat)
Meer info rond datum-/tijdfuncties: http://dev.mysql.com/doc/...e-and-time-functions.html
[ Voor 2% gewijzigd door edeboeck op 06-12-2005 21:09 . Reden: *oeps* nu pas testset [b]grondig[/b] bekeken |:( ]
Ik begreep het net als jij, en gaf date ook al als voorbeeld maar als je de opmerkingen van kenneth en de voorbeeld data bekijkt zie je dat dit niet is wat TS vraagt.edeboeck schreef op dinsdag 06 december 2005 @ 21:02:
IMHO is deze code zowel de meest correcte (datumfunctie gebruiken voor datumfunctionaliteit, geen stringfunctie) als de meest performante (omdat je de functie gebruikt waarvoor hij gemaakt is).
SQL:
1 SELECT COUNT(DISTINCT(DATE(created))) AS [Aantal unieke dagen] FROM stats
Unieke dagen zijn unieke dagen, dus het jaar speelt wel degelijk een rol ... als TS enkel het huidige jaar wil, kan hij de query aanpassen als volgt (analoog voor jaar en/ofmaand):
SQL:
1 2 SELECT COUNT(DISTINCT(DATE(created))) AS [Aantal unieke dagen] FROM stats WHERE YEAR(created)=intJaar
(intJaar is een integer variabele die het gewenste jaar bevat)
Meer info rond datum-/tijdfuncties: http://dev.mysql.com/doc/...e-and-time-functions.html
Oops! Google Chrome could not find www.rijks%20museum.nl
Misschien moet ik het beter uitleggen: ik wil in de tabel "stats" kijken van welke dagen in statistieken heb. Dat wil zeggen: als ik 35 records heb van de dag 5 december 2004, dan is 5 december 2004 een "unieke" dag. Als ik records heb staan met als datum 5 december 2005, dan is ook dat een "unieke" dagP_de_B schreef op dinsdag 06 december 2005 @ 20:50:
[...]
@TS: 2004-12-05 en 2005-12-05, moet dat als 1 of als 2 geteld worden?
De reden hiervoor is dat ik bijvoorbeeld een "gemiddeld aantal pageviews per dag" wil kunnen berekenen. Ik tel dan alle pageviews bij elkaar op, en deel deze door het aantal dagen waarvan ik statistieken. Vervolgens kun je staatjes weergeven als "vandaag 232 pageviews; dat is 12,5% boven het dagelijks gemiddelde over het afgelopen jaar".
[ Voor 60% gewijzigd door Reveller op 06-12-2005 21:08 ]
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Dit is een compleet voorbeeld: [rml]edeboeck in "[ SQL] Uniek aantal dagen tellen"[/rml]
Oops! Google Chrome could not find www.rijks%20museum.nl
[ Voor 100% gewijzigd door edeboeck op 06-12-2005 21:15 . Reden: Overbodig door post P_de_B ]
mysql_query = SELECT * FROM stats;
while ($row blbabla){
if ($row[datum] != $temp){
$aantaldagen ++;
}
$temp = $row[datum];
[ Voor 16% gewijzigd door Maxxi op 06-12-2005 21:21 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ontzettend bedankt, P_de_B en edeboeck, het werkt perfect. Ik ga nu wel de MySQL manual dieper bestuderen, want hier was ik zelf niet snel opgekomenP_de_B schreef op dinsdag 06 december 2005 @ 21:14:
Ok, dan had ik toch gelijk
Dit is een compleet voorbeeld: [rml]edeboeck in "[ SQL] Uniek aantal dagen tellen"[/rml]
[ Voor 4% gewijzigd door Reveller op 07-12-2005 14:21 ]
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Verwijderd