Functie AVG met weeknummers
Ik heb een database met weeknummers
voorbeeld
201601
201607
201610
Nu wil ik een gemiddeld weeknummer terug krijgen (1 waarde) Voorbeeld zou ongeveer een waarde van 201606 moeten terug geven.
Nu heb ik de volgende sql query gemaakt. Ik heb de query even simpel gehouden. De orginele query bevat nog wat joins :)
SELECT AVG(weeknummer) FROM Week_Nr_TB
Nu krijg ik wel een gemiddelde week terug alleen ik krijg soms ook waarden terug als 201696 :) Nu is mijn vraag is er een optie in SQL om gelijk het gemiddelde om te rekenen naar een normaal weeknummer?
voorbeeld
201601
201607
201610
Nu wil ik een gemiddeld weeknummer terug krijgen (1 waarde) Voorbeeld zou ongeveer een waarde van 201606 moeten terug geven.
Nu heb ik de volgende sql query gemaakt. Ik heb de query even simpel gehouden. De orginele query bevat nog wat joins :)
SELECT AVG(weeknummer) FROM Week_Nr_TB
Nu krijg ik wel een gemiddelde week terug alleen ik krijg soms ook waarden terug als 201696 :) Nu is mijn vraag is er een optie in SQL om gelijk het gemiddelde om te rekenen naar een normaal weeknummer?
Alleen het weeknummer gebruiken zonder het jaartal er aan.
Dat zou kunnen alleen we hebben ook weeknummers in 2015, 2016 en in 2017. Maar ik zit even te denken of dit uitmaakt. Ik zou dan de variabele moeten strippen en dan die waarde in de AVG functie moeten stoppen
201607 is natuurlijk geen weeknummer. Iemand die er niet mee bekend is, leest juli 2016.
Maar behalve een weeknummer, zal in de database toch ook wel een datum ingevoerd zijn.
Dan kan je het gemiddelde vinden met :
En dan zoeken naar een jaar met :
Je krijgt dan zoiets :
Maar behalve een weeknummer, zal in de database toch ook wel een datum ingevoerd zijn.
Dan kan je het gemiddelde vinden met :
En dan zoeken naar een jaar met :
Je krijgt dan zoiets :
Ik had het volgende gebouwd. Zie query. Om toch 'iets' van een gemiddelde te krijgen. Want ik heb echt geen datum veld alleen de jaarweek notatie :( Is het met Mysql mogelijk om een AS waarde door te zetten naar de AVG functie?
SELECT SUBSTRING(weeknummer, 5, CHAR_LENGTH(weeknummer) - 0) AS weeknummer_Temp, AVG(weeknummer_Temp) FROM Week_Nr_TB
Ik ben het met je eens 'Adoptive Solution' jaarweek nummer notatie is niet de juiste benaming
SELECT SUBSTRING(weeknummer, 5, CHAR_LENGTH(weeknummer) - 0) AS weeknummer_Temp, AVG(weeknummer_Temp) FROM Week_Nr_TB
Ik ben het met je eens 'Adoptive Solution' jaarweek nummer notatie is niet de juiste benaming
Gewijzigd op 14/10/2016 11:49:36 door Piet Knaap
Het is inderdaad altijd beter een DATE formaat op te slaan en niet zelf een formaat te bedenken.
Mocht je geen DATE formaat hebben en teveel moeite vinden om aan te passen:
edit: Je was me net voor :-)
Mocht je geen DATE formaat hebben en teveel moeite vinden om aan te passen:
edit: Je was me net voor :-)
Gewijzigd op 14/10/2016 13:36:14 door Michael -
Ik heb even een aantal weeknummers omgezet in de database naar een datum veld. En de query aangepast. AVG(week(datum)) Ik krijg dan hetzelfde resultaat terug als met de AVG(SUBSTR(weeknr, 5))
Wat ik vreemd vind is dat ik ook met SELCT AVG(week(datum)) een getal (bijvoorbeeld 10.8333) terug krijg. Wat ik eigenlijk zoek is een jaarweek (201606 of zo iets) nummer waarde als uitkomst.
Wat ik vreemd vind is dat ik ook met SELCT AVG(week(datum)) een getal (bijvoorbeeld 10.8333) terug krijg. Wat ik eigenlijk zoek is een jaarweek (201606 of zo iets) nummer waarde als uitkomst.
Piet Knaap op 14/10/2016 13:04:18:
Wat ik eigenlijk zoek is een jaarweek (201606 of zo iets) nummer waarde als uitkomst.
Dan kun je bijvoorbeeld het jaar vermenigvuldigen met 100 en daar het weeknummer bij optellen. Week 6 in 2016 wordt dan 2016 * 100 + 6 = 201606.
@Ward, wat hij bedoelt is dat hij een gemiddelde week als uitkomst wil. Nu krijg die een gemiddelde van 10.8333 terug maar wil bijv. 201606 terug.
Michael - op 14/10/2016 13:37:09:
@Ward, wat hij bedoelt is dat hij een gemiddelde week als uitkomst wil. Nu krijg die een gemiddelde van 10.8333 terug maar wil bijv. 201606 terug.
Het bovenstaande zoek ik inderdaad Ik wil geen 10.8333 maar 201606 als waarde hebben.....
Als het gemiddelde 10.8 is, neem je het gehele getal = 10 en plak je er 2016 voor.
Vraagje tussendoor: wat is een "gemiddeld weeknummer" in dit geval? Als je weken 1,2,3 en 52 hebt, dan komt het gemiddelde ergens op 10 uit, maar rond die tijd was er nul activiteit, want alles gebeurde in de laatste week van december en de eerste drie weken van januari. Als je tievallig dertig records in week 52 hebt kom je ergens in juni uit, en toen was er in geen velden of wegen enige activiteit te bekennen...
Het gaat puur om een gemiddelde.
Het probleem waar ik wel tegen aanloop is 201650 en 201702 dan gaat het plakken van een jaartal niet werken.
Toevoeging op 14/10/2016 15:54:19:
Ik heb ondertussen een php functie gevonden die van al mijn weken netjes datums heeft gemaakt. Ik heb nu dus datum. Alleen als ik AVG(week(datum)) uitvoer krijg ik nog steeds een waarde terug....
Het probleem waar ik wel tegen aanloop is 201650 en 201702 dan gaat het plakken van een jaartal niet werken.
Toevoeging op 14/10/2016 15:54:19:
Ik heb ondertussen een php functie gevonden die van al mijn weken netjes datums heeft gemaakt. Ik heb nu dus datum. Alleen als ik AVG(week(datum)) uitvoer krijg ik nog steeds een waarde terug....
Je telt getallen op en dan komt er een waarde uit als je er het gemiddelde van neemt.
weeknumner 1
weeknumner 11
weeknumner 35
Som = 47
Gemiddeld 47/3 = 15,66...
Had je iets anders verwacht?
weeknumner 1
weeknumner 11
weeknumner 35
Som = 47
Gemiddeld 47/3 = 15,66...
Had je iets anders verwacht?
Misschien is dit een stap in de goede richting:
https://www.bennadel.com/blog/175-ask-ben-averaging-date-time-stamps-in-sql.htm
Als je nu alles hebt omgezet naar DATE kun je hiervan het gemiddelde ophalen en vervolgens de week weergeven met WEEK()
https://www.bennadel.com/blog/175-ask-ben-averaging-date-time-stamps-in-sql.htm
Als je nu alles hebt omgezet naar DATE kun je hiervan het gemiddelde ophalen en vervolgens de week weergeven met WEEK()
Dat vroeg ik me dus ook af: wat wil je met een gemiddeld weeknummer?
Het gemiddelde van kerst en pasen is week 31,5 ergens in de eerste helft van augustus. En nu?
Het gemiddelde van kerst en pasen is week 31,5 ergens in de eerste helft van augustus. En nu?
Dan weet je wanneer je tussen pasen en kerst op vakantie moet.
Da' s het leuke van databases. Je kan allerlei niet relevantie informatie ophalen.
"Zoek iedereen die jan heet en waarvan het huisnumner de laatste 2 cijfers van de postcode is"
Alleen de vragensteller weet het belang van de vraag.
Da' s het leuke van databases. Je kan allerlei niet relevantie informatie ophalen.
"Zoek iedereen die jan heet en waarvan het huisnumner de laatste 2 cijfers van de postcode is"
Alleen de vragensteller weet het belang van de vraag.
Gewijzigd op 14/10/2016 16:39:07 door Adoptive Solution
"Het gaat puur om een gemiddelde."
Dat had je al gezegd, en de vraag daarop was: Welk probleem wil je met dat gemiddelde op te lossen?
Stel dat een reisorganisatie wil weten in welke week mensen gemiddeld op vakantie gaan, dan hebben ze een hoop data over weken 1-4, 20-30 en 45-52. gemiddelde:35. Maar in week 35 gaat dus niemand op vakantie.
Als een supermarkt banketstaven inkoopt op het gemiddelde weeknummer waarin ze die dingen verkopen, dan komen ze uit op weken 1,2,50,51 en 52 gemiddelde: 30. Dus zitten ze in juli al met banketstaven...
En daarom wil ik graag weten waar je dit gemiddelde voor wil gebruiken.
Kom, laat mijn eerste reply op phphulp sinds jaren niet meteeen weer zo een zijn van "ik weet wat ik doe, geef me nou maar gewoon het antwoord dat ik vraagen stel niet van die irrelevante vragen, daar vraag ik toch niet om".
Dat had je al gezegd, en de vraag daarop was: Welk probleem wil je met dat gemiddelde op te lossen?
Stel dat een reisorganisatie wil weten in welke week mensen gemiddeld op vakantie gaan, dan hebben ze een hoop data over weken 1-4, 20-30 en 45-52. gemiddelde:35. Maar in week 35 gaat dus niemand op vakantie.
Als een supermarkt banketstaven inkoopt op het gemiddelde weeknummer waarin ze die dingen verkopen, dan komen ze uit op weken 1,2,50,51 en 52 gemiddelde: 30. Dus zitten ze in juli al met banketstaven...
En daarom wil ik graag weten waar je dit gemiddelde voor wil gebruiken.
Kom, laat mijn eerste reply op phphulp sinds jaren niet meteeen weer zo een zijn van "ik weet wat ik doe, geef me nou maar gewoon het antwoord dat ik vraagen stel niet van die irrelevante vragen, daar vraag ik toch niet om".
Een jaar heeft 52 of 53 weken.
Maar een gemiddelde wordt berekend in het tientallig stelsel.
Dus alsof een jaar 00 tot 99 is 100 weken zou tellen.
(201650+201710)/2=201680.
Zoals San Theo al zei moet je in elk geval alleen de weeknummers nemen.
(50+10)/2=30. Dan klopt het wel.
Als je echter over een reeks van jaren een bepaalde week in een bepaald jaar als uitkomst wilt, lijkt me het gebruik van timestamp(), date() en time() de aangewezen weg. Dan berekent het systeem de datums (jaja, ik weet het), en die kan dat altijd beter. :-) Hoe precies weet ik niet, daar ben ik zelf nog niet aan toe...
Maar een gemiddelde wordt berekend in het tientallig stelsel.
Dus alsof een jaar 00 tot 99 is 100 weken zou tellen.
(201650+201710)/2=201680.
Zoals San Theo al zei moet je in elk geval alleen de weeknummers nemen.
(50+10)/2=30. Dan klopt het wel.
Als je echter over een reeks van jaren een bepaalde week in een bepaald jaar als uitkomst wilt, lijkt me het gebruik van timestamp(), date() en time() de aangewezen weg. Dan berekent het systeem de datums (jaja, ik weet het), en die kan dat altijd beter. :-) Hoe precies weet ik niet, daar ben ik zelf nog niet aan toe...
Gewijzigd op 16/10/2016 14:00:20 door Paul Ulje
De reactie van Pg Vincent lijkt me de enige juiste.
Het valt me op dat er de laatste tijd regelmatig vrij klakkeloos oplossingen worden aangedragen voor vraagstellingen waar je op je minst je vraagtekens bij kunt zetten. Je kan niet een "gemiddelde" week uitrekenen op basis van "omringende" weken. Dat raakt kant noch wal.
Een gemiddelde week kan alleen een week zijn waarin iets gebeurt wat een of ander gemiddelde weerspiegelt. Bijv. in een supermarkt worden per jaar 5.200 maaltijden Babi Pangang verkocht. Vervolgens kun je dan stellen dat dat er per week 100 zijn, en dan kun je kijken in welke week er precies 100 zijn verkocht. Dan heb je een "gemiddelde" week.
Drie weken uit een jaar selecteren en daar vervolgens een gemiddelde uithalen dat kan niet en slaat op de hier genoemde wijze ook nergens op. Het zou enkel ergens op slaan als je er extern gedrag aan koppelt.
Het zou prettig zijn als de vaste kern alvorens tot antwoorden over te gaan (hoe goed bedoeld ook) zich ervan gewist dat de vraagstelling een logische achterliggende gedachte heeft. Zo niet, vraag dan eerst wat de bedoeling van de vraag is, want die is mij tot op heden niet duidelijk.
Het valt me op dat er de laatste tijd regelmatig vrij klakkeloos oplossingen worden aangedragen voor vraagstellingen waar je op je minst je vraagtekens bij kunt zetten. Je kan niet een "gemiddelde" week uitrekenen op basis van "omringende" weken. Dat raakt kant noch wal.
Een gemiddelde week kan alleen een week zijn waarin iets gebeurt wat een of ander gemiddelde weerspiegelt. Bijv. in een supermarkt worden per jaar 5.200 maaltijden Babi Pangang verkocht. Vervolgens kun je dan stellen dat dat er per week 100 zijn, en dan kun je kijken in welke week er precies 100 zijn verkocht. Dan heb je een "gemiddelde" week.
Drie weken uit een jaar selecteren en daar vervolgens een gemiddelde uithalen dat kan niet en slaat op de hier genoemde wijze ook nergens op. Het zou enkel ergens op slaan als je er extern gedrag aan koppelt.
Het zou prettig zijn als de vaste kern alvorens tot antwoorden over te gaan (hoe goed bedoeld ook) zich ervan gewist dat de vraagstelling een logische achterliggende gedachte heeft. Zo niet, vraag dan eerst wat de bedoeling van de vraag is, want die is mij tot op heden niet duidelijk.
Ozzie PHP op 16/10/2016 18:07:00:
Het zou prettig zijn als de vaste kern alvorens tot antwoorden over te gaan (hoe goed bedoeld ook) zich ervan gewist dat de vraagstelling een logische achterliggende gedachte heeft.
Lees eens terug: je herhaalt de kanttekeningen die de vaste kern al had geplaatst… ;-)



