Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 2 di 3 primaprima 123 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23

creazione di un report che compari record in base a "data per singolo anno"

  1. #11
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    non mi devi nulla, siamo tutti qui per aiutarci vicendevolmente ... in teoria
    per fare questa seconda cosa ti basta ricavare la data max, da cui ricavi il GG ed il MM
    e questi li usi come filtro nella sub DATI
    quindi :
    1) creati l'SQL per selezionare il max giorno (es:25/05/2021) (1 riga)
    2) la metti come sub in altra SQL da cui con le apposite funzioni ricavi il GG ed il MM (es:GG=25 MM=5)
    3) modifichi la sub DATI inserendo nel from, oltre alla tua tabella, l'SQL ottenuto aggiungendo nel filtro
     ((month(periodoStorComm)<MM) OR (month(periodoStorComm)=MM) AND (day(periodoStorComm)<=GG))
    AND (year(Date())-Year(periodoStorComm)<4)
    
    se non ti interessa il giorno esatto si semplifica chiaramente e ti basta <=MM e a quel punto anche i passi 1 e 2 li fai senza ulteriore sub

  2. #12
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    Grazie per l'ulteriore pappa pronta che adatterò al famoso:
    DateSerial(Year(Date()),Month(Date()),0)

    a questo punto ne approfitto per chiederti un'ulteriore cosa.

    secondo te, non mi conviene creare una tabella "reale" con le date che carico.

    Riepilogo la mia operatività, ogni mese, intorno alla fine della prima settimana chiedo un'estrazione dai nostri sistemi e i nostri sistemisti mi restituiscono i dati da inizio anno al giorno antecedente quello di estrazione.
    io importo tutto e salvo i dati per tipo commissione per data fine mese di riferimento e poi faccio i report alla fine mese precedente.

    Quindi esempio a maggio chiedo i dati al 05/05/2021, me li estraggono al 04/05 ed io riporto tutte le date che trovo al fine mese di riferimento, quindi il 4/05 mi diventerà 31/05, poco male perchè poi estrarrò tutti i dati al 30/04.

    ora sapendo che le mie commissioni vanno iniziano nel 2013, se io mi salvassi il "famoso" 30/04 in una tabella, non diventa un po' più snello il codice che mi hai già suggerito? anche in considerazione del fatto che al momento la mia tabella cCommissioniStorico contiene oltre 8300 recods e che si incrementa mensilmente di circa 25 record ...

    grazie mille
    ℹ️ Leggi di più su Elimar ...

  3. #13
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    secondo te, non mi conviene creare una tabella "reale" con le date che carico.
    non ho capito... hai già la tabella cCommissioniStorico

    Fammi capire, se li estrai il giorno X di un mese tu li vorresti filtrati all'ultimo gg del mese prec?

  4. #14
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    non ho capito... hai già la tabella cCommissioniStorico
    Se non ricordo male tu avevi scritto che se ci sono troppi record la query rischia di appesantirsi, o capito male?

    Fammi capire, se li estrai il giorno X di un mese tu li vorresti filtrati all'ultimo gg del mese prec?
    sì, perché i nostri sistemisti non riescono ad estrarmi nel giorno X i dati al fine mese precedente, ma ad X-1 ed il primo giorno del mese hanno altre elaborazioni più "importanti" delle mie e quindi non riuscirebbero ad elaborare i dati.
    spero di essere stato più chiaro
    ℹ️ Leggi di più su Elimar ...

  5. #15
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    Ragazzi aiutooooooooooooooooooooo
    ho modificato il suggerimento ricevuto da muttley005 come segue:

    TRANSFORM Sum(dati.importoStorComm) AS Somma
    SELECT dati.TipologiaStorComm
    FROM (select top 1 DateSerial(Year(Date()),Month(Date()),0) as periodo from cCommissioniStorico
        union    select top 1 DateSerial(Year(Date())-1,Month(Date()),0) as periodo from cCommissioniStorico
        union    select top 1 DateSerial(Year(Date())-2,Month(Date()),0) as periodo from cCommissioniStorico
        union  select top 1 DateSerial(Year(Date())-3,Month(Date()),0) as periodo from cCommissioniStorico
        union  select top 1 DateSerial(Year(Date())-4,Month(Date()),0) as periodo from cCommissioniStorico
        union  select top 1 DateSerial(Year(Date())-5,Month(Date()),0) as periodo from cCommissioniStorico
        union  select top 1 DateSerial(Year(Date())-6,Month(Date()),0) as periodo from cCommissioniStorico
        union  select top 1 DateSerial(Year(Date())-7,Month(Date()),0) as periodo from cCommissioniStorico
        union  select top 1 DateSerial(Year(Date())-8,Month(Date()),0) as periodo from cCommissioniStorico)  AS tempo,
     (SELECT (periodoStorComm) as periodo, CcommissioniStorico.TipologiaStorComm, 
    cCommissioniStorico.importoStorComm FROM cCommissioniStorico 
    WHERE year(DateSerial(Year(Date()),Month(Date()),0)) -Year(periodoStorComm)
     <(year(DateSerial(Year(Date()),Month(Date()),0))-2013) )  AS dati
    
    WHERE (((dati.TipologiaStorComm) Is Not Null))
    GROUP BY dati.TipologiaStorComm
    PIVOT 'AA' & Year([tempo].[periodo])-Year(Date());
    
    ottengo tutti i campi che mi interessano, ma tutti i record di tutti i campi mi restituiscono lo stesso valore che corrisponde alla somma di tutti i record presenti nella tabella.

    Però visto i miei enormi limiti in materia, non riesco assoltamente a capire dove stia sbagliando.

    Grazie a chiunque riesca a datemi una dritta.

    Saluti
    Ultima modifica di Elimar; 25-05-2021 11:27 
    ℹ️ Leggi di più su Elimar ...

  6. #16
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    questo il codice che farebbe al caso mio:
    WHERE ((Year([periodostorcomm])=Year(DateSerial(Year(Date()),Month(Date()),0)) And (cCommissioniStorico.periodoStorComm)<=DateSerial(Year(Date()),Month(Date()),0)))
    
    Ma non so se, e soprattutto come, sia possibile fare una cosa del genere, in modo che faccia un analisi su tutti gli anni presenti nella tabella:

    Year(DateSerial(Year(Date())-(Year(DateSerial(Year(Date()),Month(Date()),0))-year(tempo.Periodo),Month(Date()),0))
    
    e conseguentemente anche nella parte finale del codice SQL...

    chiedo scusa ma temo di non essere stato molto chiaro.
    ℹ️ Leggi di più su Elimar ...

  7. #17
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    Quote Originariamente inviato da Elimar Visualizza il messaggio
    Se non ricordo male tu avevi scritto che se ci sono troppi record la query rischia di appesantirsi, o capito male?
    ehm ... no

    sì, perché i nostri sistemisti non riescono ad estrarmi nel giorno X i dati al fine mese precedente, ma ad X-1 ed il primo giorno del mese hanno altre elaborazioni più "importanti" delle mie e quindi non riuscirebbero ad elaborare i dati.
    spero di essere stato più chiaro
    si semplifica ulteriormente allora

  8. #18
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    perchè manca la join

    questa è filtrata al mese precedente la data massima
    TRANSFORM Sum(dati.importoStorComm) AS Valore
    SELECT dati.TipologiaStorComm
    FROM 
       (
       select top 1 year(date()) as anno from cCommissioniStorico    
       union select top 1 year(date())-1 as anno from cCommissioniStorico    
       union select top 1 year(date())-2 as anno from cCommissioniStorico    
       union select top 1 year(date())-3 as anno from cCommissioniStorico    
       union select top 1 year(date())-4 as anno from cCommissioniStorico    
       union select top 1 year(date())-5 as anno from cCommissioniStorico    
       union select top 1 year(date())-6 as anno from cCommissioniStorico    
       )  AS tempo 
       LEFT JOIN 
       (
       SELECT year([periodoStorComm]) AS anno,  
          cCommissioniStorico.TipologiaStorComm,
          cCommissioniStorico.importoStorComm 
       FROM cCommissioniStorico 
       WHERE year(Date())-Year(periodoStorComm)<7 
          and month(periodoStorComm)<
             (
             select month(ff.maxDt) from 
                (
                SELECT Max(cCommissioniStorico.periodoStorComm) AS maxDT
                FROM cCommissioniStorico
                ) ff
             )
       )  AS dati ON tempo.anno = dati.anno
    GROUP BY dati.TipologiaStorComm
    PIVOT 'AA' & Year(Date())-[tempo].[anno];
    
    Ultima modifica di muttley005; 25-05-2021 14:33 

  9. #19
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    Grazie mille mattley005,
    sei stato gentilissimo ....
    ora mando avanti il lavoro e poi cerco di analizzare e studiare il codice in modo da imparare una cosa nuova.
    ℹ️ Leggi di più su Elimar ...

  10. #20
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    questa crea l'elenco di anni utili (TEMPO)
       select top 1 year(date()) as anno from cCommissioniStorico    
       union select top 1 year(date())-1 as anno from cCommissioniStorico    
       union select top 1 year(date())-2 as anno from cCommissioniStorico    
       union select top 1 year(date())-3 as anno from cCommissioniStorico    
       union select top 1 year(date())-4 as anno from cCommissioniStorico    
       union select top 1 year(date())-5 as anno from cCommissioniStorico    
       union select top 1 year(date())-6 as anno from cCommissioniStorico
    
    questa crea l'elaborati dai dati (DATI)
       SELECT year([periodoStorComm]) AS anno,  
          cCommissioniStorico.TipologiaStorComm,
          cCommissioniStorico.importoStorComm 
       FROM cCommissioniStorico 
       WHERE year(Date())-Year(periodoStorComm)<7 
          and month(periodoStorComm)<
             (
             select month(ff.maxDt) from 
                (
                SELECT Max(cCommissioniStorico.periodoStorComm) AS maxDT
                FROM cCommissioniStorico
                ) ff
             )
    
    e poi "pivotto"

    nello specifico dei DATI
    questa riduce il numero di record per ottimizzazione ma funziona anche senza tanto "governa" la TEMPO
    WHERE year(Date())-Year(periodoStorComm)<7
    
    e questa filtra al mese prec
    and month(periodoStorComm)<
             (
             select month(ff.maxDt) from 
                (
                SELECT Max(cCommissioniStorico.periodoStorComm) AS maxDT
                FROM cCommissioniStorico
                ) ff
             )
    

+ Rispondi al messaggio
Pagina 2 di 3 primaprima 123 ultimoultimo

Potrebbero interessarti anche ...

  1. Ordinare combobox in base alla data("vera")
    Da enricotb1994 nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 07-02-2017, 13:46
  2. Risolto: LibreOffice "BASE" - Connessione a db MYSQL "drive JDBC non caricati" non li vede
    Da CMCS nel forum LibreOffice, OpenOffice e altro
    Risposte: 5
    Ultimo Post: 30-07-2014, 12:45
  3. Risposte: 4
    Ultimo Post: 22-05-2014, 14:04
  4. Risposte: 11
    Ultimo Post: 02-10-2012, 15:51
  5. Risposte: 6
    Ultimo Post: 08-12-2010, 22:59