[Risolto] Query da un giorno della settimana specifico

di il
22 risposte

22 Risposte - Pagina 2

  • Re: [Risolto] Query da un giorno della settimana specifico

    @Alex ha trovato la "famosa" soluzione elegante.

    OsvaldoLaviosa ha scritto:


    Between fDataInizio(Date()) And Date()
    Non ho testato nulla...qualcosa non mi convince sulla sintassi fDataInizio(Date())...non so se sia passabile...
    Io avevo premesso questo dubbio...e siccome non sono capace di fare tutti i calcoli "interstiziali" relativi alle date, la prima idea che mi è venuta è la Function. Ho rivisto tutto e ripropongo qui in maniera corretta
    Public Function fDataInizio(DataValidazione) As Date
    Dim dDataInizio As Date
    Select Case Weekday(Date())
        Case 1 ' domenica
           dDataInizio = Date() - 2
        Case 2 'lunedì
           dDataInizio = Date() - 3
        Case 3 'martedì
           dDataInizio = Date() - 4
        Case 4 'mercoledì
           dDataInizio = Date() - 5
        Case 5 'giovedì
           dDataInizio = Date() - 6
        Case 6 'venerdì
           dDataInizio = Date() - 7
        Case 7 'sabato
           dDataInizio = Date() - 1
    End Select
    fDataInizio = dDataInizio
    End Function
    
    Nel criterio della query scrivere questo:
    Between fDataInizio([Data Validazione]) And Date()+1

    Ho effettuato un test e funziona.
  • Re: [Risolto] Query da un giorno della settimana specifico

    Commetti ancora errori, ed inefficienze...!
    Quei SELECT CASE non servono a nulla... non vedi che esiste una correlazione tra WeekDate ed il Numero che sottrai...?
    Fai anche attenzione ad indicare al WeekDay quale è il primo gg della settimana.

    Ti scrivo la funzione come potrebbe essere meglio, ma, viste le tue voglie di imparare nonostante le lacune, devi usarla per approfondire, altrimenti i 15secondi che ti ricordo sempre di usare... non servono.
    
    Public Function fLastFriday(Optional DataValidazione) As Date
        Dim dtDate  As Date
        
        If IsMissing(DataValidazione) Then
            dtDate=Date()
        Else
           dtDate=DataValidazione
        End if
        
        fLastFriday=Dateadd("d",-2-weekday(dtDate,2),dtDate)
        ' Oppure per come l'hai scritta tu:
        ' fLastFriday=dtDate - 2-weekday(dtDate,2)
    
    End Function
    
    Richiamabile con
    
    Between fLastFriday(Date()) And Date()
    oppure
    Between fLastFriday() And Date()
  • Re: [Risolto] Query da un giorno della settimana specifico

    @Alex ha scritto:


    Fai anche attenzione ad indicare al WeekDay quale è il primo gg della settimana.
    Giusto. Sapevo benissimo che il secondo argomento era la chiave di qualunque altra soluzione elegante, ma anche la più incasinante per ricostruire tutto il bandolo della matassa. Come spesso mi accade (per parafrasare), quando non so fare la moltiplicazione, continuo a preferire volentieri la somma a ripetizione. Del resto sai benissimo anche tu che i campi di tipo Data sono sempre molto rognosi da manipolare.
    Grazie del tuo contributo.
  • Re: [Risolto] Query da un giorno della settimana specifico

    Osvaldo,
    giusto per farti comprendere quanto già osservato da Alex in merito al SELECT CASE la tua funzione poteva essere espressa in due righe di codice:
    
    Public Function fDataInizio(DataValidazione As Date) As Date
    
    If Weekday(DataValidazione) = 7 Then ' Sabato
        fDataInizio = DataValidazione - 1
    Else
        fDataInizio = DataValidazione - Weekday(DataValidazione) - 1 ' gli altri giorni (domenica - venerdì)
    End If
    
    End Function
    
    od ulteriormente ridotta in una:
    
    Public Function fDataInizio (DataValidazione As Date) As Date
    
    fDataInizio = DataValidazione - (Weekday(DataValidazione) Mod 7) - 1  ' tutti i giorni (domenica - sabato)
    
    End Function
    
  • Re: [Risolto] Query da un giorno della settimana specifico

    Si in effetti nella mia funzione c'era un errore... sul Sabato/Domenica

    Questa variante consente di Definire QUALE giorno della settimana precedente si vuole ottenere...
    
    Function DayInLastWeek(Ddate As Date, WhichDay As VbDayOfWeek)
        DayInLastWeek = Ddate - Weekday(Ddate, WhichDay) + 1 + (7 * Weekday(Ddate, WhichDay) = 1)
    End Function
    
    Ovviamente da chiaamre cosi:
    
    DayInLastWeek Date(), vbFriday(vbMonday...ecc..)
  • Re: [Risolto] Query da un giorno della settimana specifico

    @Alex ha scritto:



    Ovviamente a te serve avere la data del venerdi precedente.
    
    VenerdiPrec=Dateadd("d",-2-weekday(Date(),2), Date())
    
    Fai attenzione a dove la inserisci... sopra SQL, sotto Generatore espressioni Qbe
    
    VenerdiPrec=Dateadd("g";-2-weekday(Date();2); Date())
    
    Quindi in SQL:
    
    Between Dateadd("d",-2-weekday(Date(),2), Date()) And Date()
     
    Ciao Alex, ieri ho inserito il codice e funzionava, ma oggi quando vado a fare il report che prende i dati dalla query mi trova come data d'inizio il 28/02 e non il 06/03 come in realtà dovrebbe essere.
    Ho provato a verificare anche con l'ultimo codice che hai inserito, ma quando provo a richiamarlo dalla query mi da errore: mi dice "Tipo di dati non previsto"
    Function DayInLastWeek(Ddate As Date, WhichDay As VbDayOfWeek)
        DayInLastWeek = Ddate - Weekday(Ddate, WhichDay) + 1 + (7 * Weekday(Ddate, WhichDay) = 1)
    End Function
    come potrei correggere il criterio nella query (che mi pare la soluzione più facile al momento).
    
    Between Dateadd("g",-2-weekday(Date(),2), Date()) And Date() + 1
     
  • Re: [Risolto] Query da un giorno della settimana specifico

    Si se sei in SQL non vengono riconosciute le costanti quindi devi inseririe il valore costante.cosi:
    
    BETWEEN DayInLastWeek (Date(), 6) And Date()+1
    
    VbFriday=6
    Qui trovi i valori:
    https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/weekday-function
  • Re: [Risolto] Query da un giorno della settimana specifico

    @Alex ha scritto:


    Si se sei in SQL non vengono riconosciute le costanti quindi devi inseririe il valore costante.cosi:
    
    BETWEEN DayInLastWeek (Date(), 6) And Date()+1
    
    VbFriday=6
    Qui trovi i valori:
    https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/weekday-function
    Ciao Alex, scusa il ritardo della risposta. Funziona perfettamente! Grazie mille!
Devi accedere o registrarti per scrivere nel forum
22 risposte