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?
Dan lijkt het me eenvoudiger om eerst per record te bepalen wat de leverduur is.
Dat is bijvoorbeeld 15 dagen. DATEDIFF(leverdatum, besteldatum)
Dan neem je over een bepaalde periode (jaar) al die leverduren. En daar kun je een gemiddelde van bepalen.
[size=xsmall]Toevoeging op 17/10/2016 13:36:07:[/size]
En die query kun je dan voor zomerperiode (20 juni / 20 sept of zo) of kerstdrukte (1 dec/31 dec) aanpassen.
Ik zou zeker voor de berekeningen de weeknotaties loslaten. Hooguit in je rapport gebruiken.
Maar een bestelling op zondagavond, geleverd om maandagochten 10:30 zou anders een verschil van 1 week opleveren. (of je moet het over leveringen vanuit China per boot hebben natuurlijk)
Je bent dus niet op zoek naar een gemiddeld weeknummer, maar naar een tijdsduur als ik je goed begrijp.
>> Wat we willen is de gemiddelde inkoopdag (dus alle dagen opgeteld en dan het gemiddelde hieruit teruggeven in de SQL query) en exact hetzelfde met de gemiddelde afleverdag.
Dit lijkt me niet correct. Een gemiddelde inkoopdag wil zeggen een dag waarop gemiddeld alles wordt ingekocht. Zoiets bestaat niet.
Ik neem aan dat wat je wilt weten de gemiddelde tijdsduur is tussen het moment van inkoop en aflevering. Anders gezegd, je wilt weten hoeveel weken het gemiddeld duurt vanaf het moment van aankoop tot het moment van levering. Correct?
Als ze het in een datum willen hebben zou het een oplossing zijn Ivo. Ze willen alleen een gemiddeld weeknummer zien. Vandaar dat ik in mijn eerst post alleen weeknummer (SELECT AVG(weeknummer) FROM Week_Nr_TB) noemde
Ze willen als uitkomt van deze twee waarde 201609 terug hebben
201606 + 201612 = 201609
Geinig he, als je maar lang genoeg door hamert dan komt vanzelf de echte vraag wel boven: "Hoe kan ik de gemiddelde tijdsduur tussen twee weeknummers uitrekenen?"
"En dan uitrekenen wat het verschil is (in weken). Ze kunnen dan zeggen in periode 1 duurt het gemiddeld 20 weken maar in periode 2 duurt het gemiddeld 14 weken. En over een jaar genomen duurt het gemiddeld 18 weken "
De gemiddelde levertijd is het gemiddelde van de levertijden, niet de tijd tussen twee gemiddelde bestel- en leverdatums. Dat is wiskundig echt heel wat anders.
Gelukkig kan SQL dit helemaal zelf, je kunt datums gewoon van elkaar aftrekken en daar het gemiddelde van nemen:
SELECT AVG(leverdatum - besteldatum)
FROM tabel
WHERE besteldatum BETWEEN x AND y;
De BETWEEN bepaalt dan hoe groot de periode moet zijn waarover je rapporteert.
>> Ze willen als uitkomt van deze twee waarde 201609 terug hebben
>> 201606 + 201612 = 201609
Ik weet niet wie "ze" zijn, maar dit klopt helemaal niet. Dit slaat nergens op.
Ik bestel in juni. Ik krijg geleverd in december. Gemiddeld heb ik het product in september gekregen???
* koekoek *
Terug naar de tekentafel :-)
Het gaat om levende producten :) Koekoek is toch een vogel. Het gaat erom dat ze dan weten wat de meest ideale week is om de koekoek te gaan produceren
Voor jaar + weeknummer kun je DATE_FORMAT gebruiken:
SELECT
DATE_FORMAT(inkoopdatum, '%Y%u') AS jaar_en_weeknummer,
AVG(DATEDIFF(afleverdatum, inkoopdatum) / 7) AS gemiddelde_levertijd_in_weken
FROM
inkooporders
WHERE
inkoopdatum IS NOT NULL
AND
afleverdatum IS NOT NULL
GROUP BY
jaar_en_weeknummer