none
Aggregazione oraria da quarti ora RRS feed

  • Domanda

  • Ciao a tutti,
    ho una tabella con valori numerici riferiti ai quarti d'ora della giornata.
    Qualcosa del tipo:


    Valore - QuartoOra
    2 - 2012-12-01 00:15:00.000
    3 - 2012-12-01 00:30:00.000
    6 - 2012-12-01 00:45:00.000
    1 - 2012-12-01 01:00:00.000
    3 - 2012-12-01 01:15:00.000
    7 - 2012-12-01 01:30:00.000
    2 - 2012-12-01 01:45:00.000
    4 - 2012-12-01 02:00:00.000
    ...


    Dovrei creare ora una query che mi popoli una tabella oraria, del tipo:


    Valore - Ora
    12 - 1
    16 - 2


    ove la somma dei quarti d'ora comincia al minuto 15 e termina al minuto 00
    dell'ora seguente.

    Purtroppo non ho ancora trovato il modo di risolvere questo problema.

    Qualcuno è in grado di darmi una mano?

    Luigi

    venerdì 21 dicembre 2012 10:44

Risposte

  • Ciao Luigi,

    puoi fare così:

    -- Creo la tabella
    CREATE TABLE #T
    (Valore int, QuartoOra DateTime)
    -- inserisci i dai di esempio
    INSERT INTO #T
    VALUES (2,'2012-12-01 00:15:00.000'),
           (3,'2012-12-01 00:30:00.000'),
           (6,'2012-12-01 00:45:00.000'),
           (1,'2012-12-01 01:00:00.000'),
           (3,'2012-12-01 01:15:00.000'),
           (7,'2012-12-01 01:30:00.000'),
           (2,'2012-12-01 01:45:00.000'),
           (4,'2012-12-01 02:00:00.000')
           
    -- Eseguo la select
    SELECT DATEPART(hh,DATEADD(N,-15,QuartoOra))+1 AS Ora,
           SUM(Valore) AS SommaDiValore
    FROM #T
    GROUP BY DATEPART(hh,DATEADD(N,-15,QuartoOra))+1
    DROP TABLE #T
    /*Risultato 
    Ora         SommaDiValore
    ----------- -------------
    1           12
    2           16
    */

    se i dati sono relativi a più giorni raggruppa anche per data senza la parta ora.

    Ciao
    Giorgio Rancati

    venerdì 21 dicembre 2012 12:18
    Moderatore

Tutte le risposte

  • Ciao Luigi,

    puoi fare così:

    -- Creo la tabella
    CREATE TABLE #T
    (Valore int, QuartoOra DateTime)
    -- inserisci i dai di esempio
    INSERT INTO #T
    VALUES (2,'2012-12-01 00:15:00.000'),
           (3,'2012-12-01 00:30:00.000'),
           (6,'2012-12-01 00:45:00.000'),
           (1,'2012-12-01 01:00:00.000'),
           (3,'2012-12-01 01:15:00.000'),
           (7,'2012-12-01 01:30:00.000'),
           (2,'2012-12-01 01:45:00.000'),
           (4,'2012-12-01 02:00:00.000')
           
    -- Eseguo la select
    SELECT DATEPART(hh,DATEADD(N,-15,QuartoOra))+1 AS Ora,
           SUM(Valore) AS SommaDiValore
    FROM #T
    GROUP BY DATEPART(hh,DATEADD(N,-15,QuartoOra))+1
    DROP TABLE #T
    /*Risultato 
    Ora         SommaDiValore
    ----------- -------------
    1           12
    2           16
    */

    se i dati sono relativi a più giorni raggruppa anche per data senza la parta ora.

    Ciao
    Giorgio Rancati

    venerdì 21 dicembre 2012 12:18
    Moderatore
  • Perfetto, grazie Giorgio.

    Luigi

    venerdì 21 dicembre 2012 14:42