Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [sql] select con somma dei record precedenti

    Ciao a tutti,

    devo ottenere un dataset con una colonna/field che e' la somma dei saldi nei record precedenti...

    codice:
    select 
    clienti.id,
    clienti.nome,
    saldoclienti.saldo
    from clienti
    left join saldoclienti(clienti.id) on 1=1
    
    +----+--------------+-----------+
    | ID | NOME         |   SALDO   |
    +----+--------------+-----------+
    | 1  | CLIENTE 1    |    50.00  |
    | 2  | CLIENTE 2    |     0.00  |
    | 3  | CLIENTE 3    |    10.00  |
    | 4  | CLIENTE 4    |    15.00  |
    | 5  | CLIENTE 5    |     0.00  |
    | 4  | CLIENTE 4    |    11.00  |
    +----+--------------+-----------+
    praticamente, per ogni record, devo avere una colanna in piu che è la somma di tutti i saldi precedenti:

    esempio

    codice:
    +----+--------------+-----------+---------------+
    | ID | NOME         |   SALDO   |  SOMMA SALDI  |
    +----+--------------+-----------+---------------+
    | 1  | CLIENTE 1    |    50.00  |     50.00     |
    | 2  | CLIENTE 2    |     0.00  |     50.00     |
    | 3  | CLIENTE 3    |    10.00  |     60.00     |
    | 4  | CLIENTE 4    |    15.00  |     75.00     |
    | 5  | CLIENTE 5    |     0.00  |     75.00     |
    | 4  | CLIENTE 4    |    11.00  |     86.00     |
    +----+--------------+-----------+---------------+
    si riesce a fare con una select o devo fare per forza una stored?

    grazie

  2. #2
    ciao,
    su che database vuoi effettuare l'operazione richiesta?

    Su oracle esiste la funzione LAG e LEAD come nell'esempio successivo:

    codice:
    SELECT empno,
           ename,
           job,
           sal,
           LAG(sal, 1, 0) OVER (ORDER BY sal) AS sal_prev,
           sal - LAG(sal, 1, 0) OVER (ORDER BY sal) AS sal_diff
    FROM   emp;
    Ciao
    Mik

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao,

    uso firebird 2.1 ... e non conosco queste funzioni.

    cerco di capire se esistono e come funzionano...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    no..purtroppo in firebird 2.1 non esistono

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    sembra che le funzioni LAG e LEAD dovrebbere essere incluse nella nuova versione di firebird 3...

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da 123delphi321
    si riesce a fare con una select o devo fare per forza una stored?
    Secondo me si puo fare solo con SQL "classico" senza funzioni particolari

    non conosco Firebird percio provo a spiegarmi solo in italiano
    ________________________________________


    Immaginiamo che hai le tabella
    _____ Cl
    __ ClId ______ Numerico __ Chiave Primaria
    __ ClNome ___ Testo

    _____ Sa
    __ SaId ______ Numerico __ Chiave Primaria
    __ SaCl ______ Numerico __ Chiave Esterna
    __ Saldo _____ Numerico

    ____________________________________________

    Fai una prima vista di nome "V02" sulle tabelle "Cl" e "Sa" che contenga
    __ ClId
    __ ClNome
    __ SaId
    __ Saldo

    Join ClId = SaCl
    Quindi se hai 8 clienti e 120 saldi dovrai ottenere 120 record

    _______________________________________________

    Fai una seconda vista su "V02" e "Sa" che contenga
    __ V02.ClId ( Raggruppato)
    __ V02.ClNome ( Raggruppato)
    __ V02.SaId ( Raggruppato) ( Ordine crescente )
    __ V02.Saldo ( Raggruppato)
    __ Sa.Saldo ( Somma )

    Join V02.SaId >= Sa.SaId
    Che contenga tutti i record di "V02" ( Left Join )

    _____________________________________

    Dovrebbe essere fattibile e sufficiente
    anche con Fireird



    Facci sapere
    .

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Originariamente inviato da nman
    Facci sapere
    ..si, nell'attesa della nuova versione di firebird che include le funzioni LAG e Lead, ho optato per una stored procedure.

    grazie a tutti per l'aiuto

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 © 2026 vBulletin Solutions, Inc. All rights reserved.