Raggruppamento partendo da lunedì

di Acitano il
4 risposte

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

  • 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

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

Devi accedere o registrarti per scrivere nel forum
4 risposte