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?
Ja, maar wel een beetje laat ;-)
Pas nadat Pg Vincent er een opmerking over had gemaakt.
Het is overigens geen 'aanval' mijnerzijds, maar meer bedoeld als stimulans om soms even verder te vragen op het moment dat een vraagstelling riekt naar een vreemde achterliggende gedachte.
SELECT avg(week(datum1)),avg(week(datum2)) WHERE Jaar1 = '2016' AND KlantID='2' GROUP BY Jaar1
Wat de bedoeling is om het 'gemiddelde' (misschien is gemiddelde niet het juiste woord maar hoe zou je het anders moeten noemen) te krijgen van de week 1 velden en de week 2 velden, maar wel over het jaar genomen. Ik krijg nu een gemiddelde waarde maar ik wil een 'jaar weeknummer' (201605) terug krijgen.
ah
er zitten dus ook nog 2 datums/weken in 1 record. En daarvan wil je het gemiddelde hebben?
SELECT ROUND((Week1 + Week2) /2) FROM tabel WHERE YEAR(datum1) = 2016 AND klantID = 2
Niet dat ik snap op wat voor manier dit getal bruikbaar is.
201601 + 201603 = 403204
dat delen door 2 levert 201602
Maar
201552 + 201601 levert 403153
delen door 2 levert je 201577
Als jij er iets mee kunt, prima.
Maar zoals al gesteld: het zou handig zijn om voor de reageerders op z'n minst een poging te doen om te antwoorden op de vraag wat je hier in hemelsnaam mee moet....
:-) gewoon doen, anders krijg je nooit een goed antwoord.
"Wat de bedoeling is om het 'gemiddelde' (misschien is gemiddelde niet het juiste woord maar hoe zou je het anders moeten noemen)"
En daar zit het probleem; ik kan me geen beeld vormen van wat je bedoelt met "gemiddelde week". Een weeknummer is een datum en zoals anderen al hebben uitgelegd is een gemiddelde datum feitelijk een loze kreet. Je vraagt immers eigenlijk gewoon wat het gemiddelde is van "maandag,woensdag en donderdag", of "wat is het gemiddelde van parijs en londen"? Je kunt wel vragen om het gemiddelde aantal inwoners van prijs en londen, en je kunt vragen om het gemiddelde aantal verkochtte bioscoopkaartjes op maandag, woensdag en donderdag, maar "het gemiddelde van twee weken" zegt mij (en de rest) niets. En daarom vermoed ik dat je ergens een denkfoutje maakt...
Kun je een concreet voorbeeld geven van de brondata die je hebt en de uitslag die je wilt krijgen? (mag verzonnen data zijn uiteraard, als het maar de vorm heeft die je gebruikt) en dan ook graag een uitleg van waar je die data voor gebruikt?
en is je gewenste 201605 puur een voorbeeld van het formaat? Want hoe je van 201640 en 201702 op 201605 wilt uitkomen, is mij een raadsel.
----
Zo maar een idee he.
Stel dat het achterliggende probleem is, dat je een oplossing zoekt voor "op welke datum stuur ik een mailtje aan de klant dat het project halverwege is?"
Dan zou je moeten weten wat de lengte van de periode is tussen de 2 datums (in dagen.
Deel die waarde door 2 en tel dat op bij de begindatum.
Dan heb je een nieuwe datum. En daarvan bepaal je het weeknummer.
Dus
SELECT ROUND(DATEDIFF(datum1, datum2) /2); -- midden van de periode
SELECT datum1 + INTERVAL ROUND(DATEDIFF(datum1, datum2) /2) DAY ; -- de datum van die dag
SELECT YEARWEEK(datum1 + INTERVAL ROUND(DATEDIFF(datum1, datum2) /2) DAY); -- het weeknummer van die datum
Piet, kun je uitleggen wat Datum1 en Datum2 zijn? Als Datum1 bijvoorbeeld een factuurdatum en Datum2 een betaaldatum is of als Datum1 een besteldatum en Datum2 een leverdatum is, dan is duidelijker wat je probeert te bereiken. (Kolomnamen met een volgnummer gebruiken is meestal geen goed idee; gebruik liever betekenisvollere namen.)
Bedenk verder dat het verschil tussen twee datums geen datum is, maar een interval of een periode in ISO-termen. Denk bij de vorige gevallen bijvoorbeeld aan een betaaltermijn en een levertermijn. Dit verschil zie je in PHP bijvoorbeeld terug in de klassen DateTime en DateInterval. Dat komt misschien van pas als je niet de "gemiddelde datum" maar meer de gemiddelde afwijking van een datum zoekt.
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.
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
Ze werken bij ons met de tijdnotitie 201601 als week 1 of 201640 als week 40 van het jaar 2016.