TSQL - Contare in una data

di il
3 risposte

TSQL - Contare in una data

Ciao a tutti,

è possibile fare una statistica con le query partendo da dei dati cosi configurati?

Tabella a: anagrafica
id (chiave)
nominativo
Tabella b: ferie
id (chiave)
id_anagrafica (chiave esterna)
data_inizio
data_fine 

Query:
SELECT b.id, a.nominativo, b.data_inizio, b.data_fine 
FROM anagrafica a INNER JOIN 
     ferie b ON (a.id = b.id_anagrafica) 
WHERE b.data_inizio >= getdate()
Cosi facendo ottengo:
id, nominativo, data_inizio, data_fine 
1,Mario, 01/06/2018, 30/06/2018
2,Marino, 08/06/2018, 25/06/2018
3,Maria, 01/07/018, 05/07/2018
-
-
-
Avendo solo un data_inizio e data_fine non riesco a sapere in un giorno quante persone sono in ferie.
Quello che mi servirebbe è :
data, num_pers_in_ferie
01/06/2018: 1
02/06/2018: 1
03/06/2018: 1
-
-
08/06/2018: 2
Pote aiutarmi?

Grazie in anticipo

3 Risposte

  • Re: TSQL - Contare in una data

    Questo esempio ti dice chi è, o chi sarà, o chi era (*) in ferie il 15 giugno 2018:
    (*) dipende da quale data inserisci
    
    WHERE CAST('2018-06-15' AS Datetime) BETWEEN DataIniz AND DataFine
    
    Mentre questo chi è in ferie oggi:
    WHERE GETDATE() BETWEEN DataIniz AND DataFine
  • Re: TSQL - Contare in una data

    Grazie per la risposta.
    In realtà mi serve il numero di persone in ferie per ogni giorno.

    C'è un tizio che mi ha indicato la seguente, ma sinceramente non ho capito granché, potete commentarmi il codice?
    DECLARE @startDate DATETIME=CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + CAST(YEAR(GETDATE()) AS VARCHAR) -- mm/dd/yyyy
    DECLARE @endDate DATETIME= GETDATE() -- mm/dd/yyyy
    
    select  [DATA] = convert(date, DATEADD(Day,Number,@startDate)),
               --[DATA] = CONVERT(varchar, DATEADD(Day,Number,@startDate), 103)
               SUM(case when DATEADD(Day,Number,@startDate) between data_start and data_end then 1 else 0 end) Pers_in_Ferie
    from   master..spt_values  c,
              #registry a
              INNER JOIN
              #holidays b ON (a.id = b.id_anagrafica)
    where c.Type='P' and DATEADD(Day,Number,@startDate) >=data_start and DATEADD(Day,Number,@startDate) <=data_end
    group by DATEADD(Day,Number,@startDate)
    order by [DATA]
    il risultato dovrebbe essere il seguente:
    DATA       Pers_in_Ferie
    ---------- -------------
    2018-06-01 1
    2018-06-02 1
    2018-06-03 1
    2018-06-04 1
    2018-06-05 1
    2018-06-06 1
    2018-06-07 1
    2018-06-08 1
    Grazie ancora al forum
  • Re: TSQL - Contare in una data

    Scusa, basta fare un COUNT!
    Non c'è bisogno di tutta quella 'pappardella'.

    Comunque, vedi tu.
Devi accedere o registrarti per scrivere nel forum
3 risposte