Functie AVG met weeknummers

Overzicht

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 volgende »

Piet Knaap

Piet Knaap

14/10/2016 10:21:25
Anchor link
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?
 
PHP hulp

PHP hulp

15/11/2024 10:29:41
 
- SanThe -

- SanThe -

14/10/2016 11:05:49
Anchor link
Alleen het weeknummer gebruiken zonder het jaartal er aan.
 
Piet Knaap

Piet Knaap

14/10/2016 11:08:53
Anchor link
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
 
Adoptive Solution

Adoptive Solution

14/10/2016 11:39:15
Anchor link
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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
avg(week(date))


En dan zoeken naar een jaar met :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
where year(date) = 2016


Je krijgt dan zoiets :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
select avg(week(date)) from table where year(date) = 2016;
 
Piet Knaap

Piet Knaap

14/10/2016 11:48:40
Anchor link
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
Gewijzigd op 14/10/2016 11:49:36 door Piet Knaap
 
Michael -

Michael -

14/10/2016 11:49:20
Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT AVG(SUBSTR(weeknr, 5)) WHERE SUBSTR(weeknr, 1, 4) = "2016"


edit: Je was me net voor :-)
Gewijzigd op 14/10/2016 13:36:14 door Michael -
 
Piet Knaap

Piet Knaap

14/10/2016 13:04:18
Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

14/10/2016 13:33:26
Anchor link
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.
 
Michael -

Michael -

14/10/2016 13:37:09
Anchor link
@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.
 
Piet Knaap

Piet Knaap

14/10/2016 14:26:08
Anchor link
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.....
 
Adoptive Solution

Adoptive Solution

14/10/2016 14:40:29
Anchor link
Als het gemiddelde 10.8 is, neem je het gehele getal = 10 en plak je er 2016 voor.
 
Pg Vincent

Pg Vincent

14/10/2016 15:34:53
Anchor link
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...
 
Piet Knaap

Piet Knaap

14/10/2016 15:41:10
Anchor link
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....
 
Adoptive Solution

Adoptive Solution

14/10/2016 16:15:36
Anchor link
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?
 
Michael -

Michael -

14/10/2016 16:31:04
Anchor link
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()
 
Ward van der Put
Moderator

Ward van der Put

14/10/2016 16:31:17
Anchor link
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?
 
Adoptive Solution

Adoptive Solution

14/10/2016 16:38:44
Anchor link
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.
Gewijzigd op 14/10/2016 16:39:07 door Adoptive Solution
 
Pg Vincent

Pg Vincent

15/10/2016 09:57:53
Anchor link
"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".
 
Paul Ulje

Paul Ulje

16/10/2016 13:52:06
Anchor link
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...
Gewijzigd op 16/10/2016 14:00:20 door Paul Ulje
 
Ozzie PHP

Ozzie PHP

16/10/2016 18:07:00
Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

16/10/2016 18:32:45
Anchor link
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… ;-)
 

Pagina: 1 2 3 4 volgende »

 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.