Raggruppamento partendo da lunedì

di il
4 risposte

Raggruppamento partendo da lunedì

Buongiorno a tutti,

ho l'esigenza di raggruppare un recordset in una query per num. settimane ma partendo dal lunedì.

Allego come esempio una tabella dove l'aggiornamento viene fatto con la funzione datepart nella colonna della settimana:

settimana: DatePart("ii";[valuta]-2)
annovalutasettimanaSommaDiavere
2025giovedì 15 maggio 202520125
2025venerdì 16 maggio 202520551
2025lunedì 19 maggio 202520790
2025giovedì 22 maggio 202521314,8
2025venerdì 23 maggio 202521272,8
2025lunedì 26 maggio 2025211068
2025martedì 27 maggio 202522
 
2025mercoledì 28 maggio 20252225
2025giovedì 29 maggio 202522186,75
2025venerdì 30 maggio 20252280,19

Nella tabella di risultato dovrei solo aggregare per n. di settimana e non per giorno, per esempio alla settimana 22 dovrei avere solo la somma di "SommaDiavere" partendo dai valori di lunedì 26 al venerdì 30 Maggio ovvero 1068+25+186,75+80,19=1359,94

Spero di essere stato chiaro

Grazie in anticipo

4 Risposte

  • Re: Raggruppamento partendo da lunedì

    Se devi partire dal Lunedi della Settimana, devi generare un Campo Calcolato con il Lunedì della settimana...

    Function FirstDayInWeek(ByVal pDate As Variant, Optional vFirstDayInWeek As VBA.VbDayOfWeek = VBA.VbDayOfWeek.vbMonday) As Date
        ' ------------------------------------------------------
        ' Restituisce il primo gg della settimana passando la Data
        ' ------------------------------------------------------
        Dim mDate	As Date
        mDate=pDate
        If Not IsDate(mDate) Then mDate= Date()
    
        FirstDayInWeek = Fix(mDate- Weekday(mDate, vFirstDayInWeek) + 1)
    End Function

    La chiami semplicemente da SQL così:

    SELECT Campi1, CampoData, FirstDayInWeek(CampoData) AS LunediSettimana ....

    Poi vedi tu come strutturare la GROUPED

  • Re: Raggruppamento partendo da lunedì

    Ciao a tutti... 

    ho provato a fare tale calcolo in questo modo...

    Tabella e Query di esempio:

    Risultato:

    SELECT Year([valuta]) AS Anno, DatePart("ww",[valuta],2,2) AS Settimana, Sum(TblValuta.Diavere) AS SommaDiDiavere
    FROM TblValuta
    GROUP BY Year([valuta]), DatePart("ww",[valuta],2,2)
    ORDER BY Year([valuta]), DatePart("ww",[valuta],2,2);
    

    Da verificare se non ho sbagliato, i calcoli mi tornano

    il datepart andrebbe scritto in questo modo :  DatePart("ww";[valuta];2;2)   dove i parametri sono :
    "ww" = week (periodo)
    [valuta] = importo da sommare
    2 = firstdayofweek - primo giorno della settimana
    2 = firstweekofyear - prima settimana dell'anno

    doc microsoft :  https://support.microsoft.com/en-us/office/datepart-function-26868a79-5505-4e5a-8905-6001372223fa?

  • Re: Raggruppamento partendo da lunedì

    Non uso mai quel metodo per ricavare il WeekNumber per un noto BUG del primo lunedì dell'anno... quindi io andrei a sottrarre alla data Ngg quanti sono quelli del gg per tornare a Lunedì, come da mio esempio.

    https://learn.microsoft.com/en-us/office/troubleshoot/access/functions-return-wrong-week-number

  • Re: Raggruppamento partendo da lunedì

    06/06/2025 - @Alex ha scritto:

    Non uso mai quel metodo per ricavare il WeekNumber per un noto BUG del primo lunedì dell'anno... quindi io andrei a sottrarre alla data Ngg quanti sono quelli del gg per tornare a Lunedì, come da mio esempio.

    https://learn.microsoft.com/en-us/office/troubleshoot/access/functions-return-wrong-week-number

    Ottimo a sapersi ... grazie mille!

Devi accedere o registrarti per scrivere nel forum
4 risposte