Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25
  1. #11
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    25
    Quote Originariamente inviata da optime Visualizza il messaggio
    considerando le date di apertura e di chiusura, sviluppando su excel ho i seguenti periodi e le relative presenze contemporanee:

    da 18/12/19 a 03/01/20 : 1
    da 04/01/20 a 18/01/20 : 2
    da 19/01/20 a 24/01/20 : 3
    da 25/01/20 a 12/02/20 : 4
    da 13/02/20 a 02/03/20 : 2
    da 03/02/20 a 19/03/20 : 1


    GG : 93
    MIN: 1
    MAX: 4
    AVG: 2,107526882
    Esatto sarebbe questo l'output che vorrei!

  2. #12
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    25
    Ottimo adesso cerco di capire.
    Devo costruire una tabella calendario ma mi dici
    Quote Originariamente inviata da marino51 Visualizza il messaggio
    essendola tabella calendario, solo un "driver", nessuno vieta di crearel'intero calendario necessario,
    Quote Originariamente inviata da marino51 Visualizza il messaggio

    limitando poi la selezione nella query stessa,ampliando la clausola where
    codice:
      AND ( DATA_ANALISI BETWEEN'2019-01-01' AND '2019-01-31' )


    cosa intendi esattamente?

    Poi non capisco come vai a valorizzare il campo per avere le presenze, cioè come leggi ogni singolo record della Tabella dati e valorizzi le date per avere le presenze da contare alla fine per ogni giorno?




  3. #13
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    25
    Io, nella mia ignoranza, avevo pensato a qualcosa del genere... ma non so come realizzarlo.

    codice:
    01 LEGGI TABELLA REPORT
    02 Valorizza variabile DATA con 01/01/2018
    03 Valorizza variabile [CONT PRES] con 0
    04 Posizionati su record X = 1
    05 CONFRONTA variabile DATA  se maggiore di [DATA AUTORIZZAZIONE] E minore di [DATA CHIUSURA] SE SI aggiungi uno a variabile [CONT PRES] SE NO aggiungi 0
    06 SE Record X+1 ha campo [SERIAL VALORIZZATO] allora SPOSTATI SU Record X+1 E ESEGUI 05
    07 SE NO scrivi su tabella volatile presenze campo uno valore in variabile [DATA] e in campo due il valore di variabile [CONT PRES] aggiungi uno a variabile DATA Valorizza variabile [CONT PRES] con 0
    SE variabile DATA minore di 31/12/2020 allora da 04  SE NO STOP.

  4. #14
    sbs, prova la query di marino51, fa già tutto

  5. #15
    un consiglio, le date memorizzale in formato Date/DateTime, non text

  6. #16
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    Quote Originariamente inviata da sbs Visualizza il messaggio
    Devo costruire una tabella calendario
    si il calendario (in join con presenze) consente una sorta di "foreach" fatto con una query anziche con un altro linguaggio, non badare alla sintassi ma questa é la tabella calendario
    codice:
    DECLARE @calendario TABLE(
      DATA_ANALISI               datetime
    );

    ora trovi in successione le tre query ( varianti della stessa ma se noti, uguali ) che mi hanno permesso di controllare il risultato
    codice:
    -- elenco delle righe di presenza estratte ed utili per il calcolo
    
    
    SELECT
      SERIAL
    , ID_APERTURA
    , STATO
    , CONVERT(varchar, DATA_RICHIESTA,      23) AS DATA_RICHIESTA
    , CONVERT(varchar, DATA_AUTORIZZAZIONE, 23) AS DATA_AUTORIZZAZIONE
    , CONVERT(varchar, DATA_CHIUSURA,       23) AS DATA_CHIUSURA
    , CONVERT(varchar, DATA_ANALISI,        23) AS DATA_ANALISI
    FROM calendario, presenze
    WHERE STATO = 'CHIUSA'
      AND NOT (DATA_ANALISI < DATA_AUTORIZZAZIONE OR DATA_CHIUSURA < DATA_ANALISI)
    ORDER BY DATA_ANALISI, DATA_AUTORIZZAZIONE
    
    
    -- estrazione date di presenza e numero di presenti
    
    
    SELECT
      CONVERT(varchar, DATA_ANALISI, 23) AS DATA_ANALISI
    , count(DATA_ANALISI) AS PRESENZE
    FROM calendario, presenze
    WHERE STATO = 'CHIUSA'
      AND NOT (DATA_ANALISI < DATA_AUTORIZZAZIONE OR DATA_CHIUSURA < DATA_ANALISI)
    GROUP BY DATA_ANALISI
    ORDER BY PRESENZE DESC, DATA_ANALISI
    
    
    -- calcolo valori
    
    
    SELECT
      CONVERT(varchar, min(DATA_ANALISI), 23) AS MIN_ANALISI
    , CONVERT(varchar, max(DATA_ANALISI), 23) AS MAX_ANALISI
    , count(DATA_ANALISI) AS NUMERO_GIORNI
    , sum(PRESENZE) AS NUMERO_PRESENZE
    , min(PRESENZE) AS MIN_PRESENZE
    , max(PRESENZE) AS MAX_PRESENZE
    , CONVERT(decimal(10,6), sum(PRESENZE)) / CONVERT(decimal(10,6), count(DATA_ANALISI)) AS AVG_PRESENZE
    FROM (
    SELECT
      CONVERT(varchar, DATA_ANALISI, 23) AS DATA_ANALISI
    , count(DATA_ANALISI) AS PRESENZE
    FROM calendario, presenze
    WHERE STATO = 'CHIUSA'
      AND NOT (DATA_ANALISI < DATA_AUTORIZZAZIONE OR DATA_CHIUSURA < DATA_ANALISI)
      AND ( DATA_ANALISI BETWEEN '2019-01-01' AND '2019-01-31' )
    GROUP BY DATA_ANALISI
    ) x
    nel post precedente, ti ho passato solo l'ultima che calcola i valori necessari
    ora hai la possibilità di vedere anche i passaggi intermedi

    ps per le prove uso tabelle temporanee ma non modificano il risultato
    Ultima modifica di marino51; 10-06-2021 a 17:16

  7. #17
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    25
    Quote Originariamente inviata da marino51 Visualizza il messaggio
    immagine cancellata, vedi post successivo

    ho usato i valori della tabella presenze REPORT che hai pubblicato,
    ho creato una tabella calendario con le date da analizzare da 2018-12-18 fino a 2019-04-12 (DATA_ANALISI)
    ho estratto i valori con questa query,
    codice:
    SELECT
      count(DATA_ANALISI) AS NUMERO_GIORNI
    , sum(PRESENZE) AS NUMERO_PRESENZE
    , min(PRESENZE) AS MIN_PRESENZE
    , max(PRESENZE) AS MAX_PRESENZE
    , CONVERT(decimal(10,6), sum(PRESENZE)) / CONVERT(decimal(10,6), count(DATA_ANALISI)) AS AVG_PRESENZE
    FROM (
    SELECT
      CONVERT(varchar, DATA_ANALISI, 23) AS DATA_ANALISI
    , count(DATA_ANALISI) AS PRESENZE
    FROM calendario, presenze
    WHERE STATO = 'CHIUSA'
      AND NOT (DATA_ANALISI < DATA_AUTORIZZAZIONE OR DATA_CHIUSURA < DATA_ANALISI)
    GROUP BY DATA_ANALISI
    ) x
    la query interna la puoi usare per estrarre i dati intermedi (data, presenze)
    ma togliendo il group by puoi estrarre tutti gli elementi della tabella presenze che vengono selezionati

    anche se tagliata per sql server, penso che non avrai difficoltà ad applicarla in access vista la semplicità

    spero che il risultato sia quello desiderato e la query utile
    la tabella dati si chiama REPORT
    cerco di rimetterla in access ma non ho capito come hai creato la "tabella calendario con le date da analizzare da 2018-12-18 fino a 2019-04-12 "(DATA_ANALISI)
    codice:
     AND ( DATA_ANALISI BETWEEN '2019-01-01' AND '2019-01-31' )
    che non ho ben capito?

  8. #18
    la tabella calendario la puoi creare con un copia & incolla da Excel

  9. #19
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    25
    Ho provato a rieditare il tutto
    ecco le mie 3 query

    codice:
    QUERY UNO
    SELECT REPORT.Serial, REPORT.ID_apertura, REPORT.STATO, REPORT.[data richiesta], REPORT.[DATA AUTORIZZAZIONE], REPORT.[data chiusura], DATA_ANALISI.DATA
    FROM REPORT, DATA_ANALISI
    GROUP BY REPORT.Serial, REPORT.ID_apertura, REPORT.STATO, REPORT.[data richiesta], REPORT.[DATA AUTORIZZAZIONE], REPORT.[data chiusura], DATA_ANALISI.DATA
    HAVING (((REPORT.STATO)="chiusa") AND ([DATA AUTORIZZAZIONE]<[DATA]) AND ([data chiusura]>[DATA]));
    
    QUERY DUE
    SELECT uno.[DATA], Count(uno.[ID_apertura]) AS PRESENZE
    FROM uno
    GROUP BY uno.[DATA]
    ORDER BY uno.[DATA];
    
    
    QUERY TRE
    SELECT Count(DUE.data) AS [CONTA GIORNI], Min(DUE.PRESENZE) AS MINIMO, Max(DUE.PRESENZE) AS MASSIMO, Avg(DUE.PRESENZE) AS MEDIA
    FROM DUE;
    il risultato è stato:

    CONTA GIORNI MINIMO MASSIMO MEDIA
    364 1 11 5,51648351648352

  10. #20
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    25
    Quote Originariamente inviata da optime Visualizza il messaggio
    la tabella calendario la puoi creare con un copia & incolla da Excel

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.