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?
een gemiddelde periode zoek je dus.

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.
Ja de between functie gebruik ik ook alleen hoe kan ik dit terug krijgen
201606 + 201612 = 201609

of nog leuker
201652 + 201702 = 201701
>> 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 :-)
Ozzie PHP op 17/10/2016 13:50:01

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

Leg het nu eens uit met een reëel concreet voorbeeld, want ik snap nu echt niet wat je wilt bereiken.
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
Ozzie PHP op 17/10/2016 13:54:50

Leg het nu eens uit met een reëel concreet voorbeeld, want ik snap nu echt niet wat je wilt bereiken.


duidelijker dan wat is het gemiddelde van 201606 + 201612 of 201652 + 201702 zou ik niet meer weten

Reageren