Query di raggruppamento con diversi intervalli di date

di il
31 risposte

Query di raggruppamento con diversi intervalli di date

Scusate ragazzi, non mi viene in mente la soluzione al seguente quesito: ho una serie di record con una data inizio e data fine. Vorrei creare una query di ragguppamento dove per ogni record ci sia l'intervallo data dalla più vecchia e quella più recente. Insomma dal al. Grazie.

31 Risposte

  • Re: Query di raggruppamento con diversi intervalli di date

    L' unica soluzione che mi viene in mente è quella di creare una query di raggruppamento (ovviamente senza le date) e creare due campi date calcolati di inizio e fine, ricorrendo a funzioni di aggregazione ma com bassissima efficienza.

  • Re: Query di raggruppamento con diversi intervalli di date

    Un rsempio di dati in tabella e risultato finale?

    Potresti fare la union di più select con date da a 

  • Re: Query di raggruppamento con diversi intervalli di date

    Ci sono 7 campi di cui due campi corrispodono  alle date inizio e fine. Non vedo però come una UNION possa risolvere il problema.

  • Re: Query di raggruppamento con diversi intervalli di date

    08/04/2024 - Antony73 ha scritto:


    Ci sono 7 campi di cui due campi corrispodono  alle date inizio e fine. Non vedo però come una UNION possa risolvere il problema.

    Infatti ho chiesto un esempio.

    08/04/2024 - Antony73 ha scritt

  • Re: Query di raggruppamento con diversi intervalli di date

    08/04/2024 - Antony73 ha scritto:


    Scusate ragazzi, non mi viene in mente la soluzione al seguente quesito: ho una serie di record con una data inizio e data fine. Vorrei creare una query di ragguppamento dove per ogni record ci sia l'intervallo data dalla più vecchia e quella più recente. Insomma dal al. Grazie.

    Ciao, 

    non penso di aver capito bene la richiesta… provo a fare delle ipotesi.

    Hai provato in raggruppamento con le funzioni Min e Max ? 

  • Re: Query di raggruppamento con diversi intervalli di date

    Faccio un esempio pratico:

    I signori Rossi e Bianchi svolgono distinte attività lavorative in relazione ad uno stesso numero d'ordine in archi temporali diversi:

    nome        cognome       N. Ordine               data inizio         data fine

    Antonio    Rossi                       1                       10/03/2024       17/03/2024

    Antonio    Rossi                       1                       14/03/2024       18/03/2024

    Antonio    Rossi                       1                       11/03/2024       19/03/2024

    Gianni      Bianchi                    2                       01/02/2024       01/03/2024

    Gianni      Bianchi                    2                       10/02/2024       10/03/2024

    Gianni      Bianchi                    2                       14/02/2024       03/03/2024

    Dovrei ottenere:

    Antonio    Rossi                       1                       10/03/2024       19/03/2024

    Gianni      Bianchi                    2                       01/02/2024       10/03/2024

  • Re: Query di raggruppamento con diversi intervalli di date

    Allora con il Min e il Max function di raggruppamento:

    Esempio

    SELECT TblOrdini.Nome, TblOrdini.Cognome, TblOrdini.NrOrdine, Min(TblOrdini.DateStart) AS MinDiDateStart, Max(TblOrdini.DateEnd) AS MaxDiDateEnd
    FROM TblOrdini
    GROUP BY TblOrdini.Nome, TblOrdini.Cognome, TblOrdini.NrOrdine;

    Risultato:


    Se la tabella in questione contiene i seguenti records:

  • Re: Query di raggruppamento con diversi intervalli di date

    Nascerebbe il problema con:

    Antonio    Rossi                       1                       10/03/2024       17/03/2024

    Antonio    Rossi                       1                       14/04/2024       10/05/2024

    risultato:

    Antonio    Rossi                       1                       10/03/2024       18/05/2024

    non so a cosa serve il dato ma rischi di avere valori errati.

    se si tratta di calcolo giorni lavorativi risulterebbe un periodo da retribuire dal 10/3 al 18/5 piuttosto che dal 10/3 al 17/3 + dal 14/4 al 10/5

    ma anche in caso di mansioni con diverse retribuzioni con i dati da te descritti.

  • Re: Query di raggruppamento con diversi intervalli di date

    Si hai ragione Franco, grazie. Ci ho riflettuto e ho convenuto che mi sono perso in un bicchier d'acqua. 

    09/04/2024 - sihsandrea ha scritto:


    se si tratta di calcolo giorni lavorativi risulterebbe un periodo da retribuire dal 10/3 al 18/5 piuttosto che dal 10/3 al 17/3 + dal 14/4 al 10/5

    Scusa Andrea, ma non capisco per quale motivo l'intervallo data si debba estendere fino al 18/05.

  • Re: Query di raggruppamento con diversi intervalli di date

    09/04/2024 - sihsandrea ha scritto:


    Nascerebbe il problema con:

    Antonio    Rossi                       1                       10/03/2024       17/03/2024

    Antonio    Rossi                       1                       14/04/2024       10/05/2024

    risultato:

    Antonio    Rossi                       1                       10/03/2024       18/05/2024

    Scusa ma non ho capito bene… 

    se si cambia la data di fine in 18/05/2024… per esempio :

    Risultato:


    Quindi si ottiene sempre il periodo massimo che impegna quell'ordine … dalla data alla data.
    Io l'avrei capita in questo senso l'esigenza…


    Tu invece cosa intendevi segnalare di anomalia ? 

  • Re: Query di raggruppamento con diversi intervalli di date

    09/04/2024 - Antony73 ha scritto:


    Scusa Andrea, ma non capisco per quale motivo l'intervallo data si debba estendere fino al 18/05.

    Quando parlavi di intervalli di data pensavo a periodi distaccati tra loro non sovrapposti.

    Una ricerca da a con le date modificate da me che potrebbero risultare nel normale svolgimento lavorativo, rischi di falsare il risultato. Ovviamente parlo per pura ipotesi, non sapendo a cosa si riferiscono i dati immessi.

    Sempre per ipotesi, se le ore lavorative per un prodotto finito richiede 10 giorni suddivisi in 3 mesi con un filtro da a ottieni 90 giorni piuttosto che 10 giorni.

    Era solo un'osservazione.

    Sempre nell'esempio dei dati che hai messo come esempio, per lo stesso ordine utilizzi 3 record.

    Ovviamente non dico che sia concettualmente errato ma si potrebbe prospettare l'idea di inserire un solo record da a vista la continuità. Sarebbe diverso (per come la penso io, non perché tu stia sbagliando in qualcosa) se mario rossi lavora dal 1/1 al 10/1 e dal 15/1 al 22/1 su ordine 1 e dal 3/1 al 20/1 e dal 23/1 al 31/1 su ordine 2. In quel caso, sempre mia considerazione non necessariamente corretta, abbiamo:

    Mario rossi dal 1/1 al 22/1 ordine 1…. 23 gg ma sono 18 gg reali

    Mario rossi dal 3/1 al 31/1 ordine 2… 28 gg ma sono 25 gg reali

    A seconda della mole.dei dati e della loro frammentazione temporale, rischi di avere dati falsati.

    Se questo dato serve per calcolare le ore di lavoro da imputare all'ordine non va bene.

    Solo un'osservazione personale.

  • Re: Query di raggruppamento con diversi intervalli di date

    No. Non serve per calcolare le ore lavorative, ma solo per tenere traccia delle giornate in cui quelle attività sono state svolte.

  • Re: Query di raggruppamento con diversi intervalli di date

    Scusate ancora ragazzi. E se la situazione fosse quella di seguito indicata? Se ci fosse, cioè, un ulteriore periodo non sovrapponibile con il primo?

    nome        cognome       N. Ordine               data inizio         data fine

    Antonio    Rossi                       1                       10/03/2024       17/03/2024

    Antonio    Rossi                       1                       14/03/2024       18/03/2024

    Antonio    Rossi                       1                       11/03/2024       19/03/2024

    Gianni      Bianchi                    2                       01/02/2024       01/03/2024

    Gianni      Bianchi                    2                       10/02/2024       10/03/2024

    Gianni      Bianchi                    2                       14/02/2024       03/03/2024

    Antonio    Rossi                       1                       10/06/2024       17/06/2024

    Antonio    Rossi                       1                       16/06/2024       22/06/2024

    Dovrei ottenere:

    Antonio    Rossi                       1                       10/03/2024       19/03/2024

    Antonio    Rossi                       1                       10/06/2024       22/06/2024

    Gianni      Bianchi                    2                       01/02/2024       10/03/2024

  • Re: Query di raggruppamento con diversi intervalli di date

    09/04/2024 - Antony73 ha scritto:


    No. Non serve per calcolare le ore lavorative, ma solo per tenere traccia delle giornate in cui quelle attività sono state svolte.

    Beh nel mio esempio viene fuori che è stata svolta in un tempo maggiore del necessario…

    10/04/2024 - Antony73 ha scritto:


    Scusate ancora ragazzi. E se la situazione fosse quella di seguito indicata? Se ci fosse, cioè, un ulteriore periodo non sovrapponibile con il primo?

    Questo è solo il primo nodo che viene al pettine…

    Io andrei di codice (se solo sapessi qual è lo scopo).

    Chiedi da a ma dai dati inseriti nin ha senso.

    Non ha senso mario ordine 1 lavora dal 1/1 al 10/1 e dal 2/1 al 3/1.

    Dal 2/1 al 3/1 cos'è, lavoro con straordinario? E max e min come fa a distinguerli?

    Se spieghi cosa ti serve magari ti suggeriamo di aprire un'altra discussione.

Devi accedere o registrarti per scrivere nel forum
31 risposte