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?
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 :

avg(week(date))


En dan zoeken naar een jaar met :

where year(date) = 2016


Je krijgt dan zoiets :

select avg(week(date)) from table where year(date) = 2016;
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





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:

SELECT AVG(SUBSTR(weeknr, 5)) WHERE SUBSTR(weeknr, 1, 4) = "2016"


edit: Je was me net voor :-)
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.
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.

Reageren