Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Funzione Sum

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    19

    AIUTO Funzione Sum

    Il dilemma e questo, che mi stà portando via le nottati.

    Ho una tabella contenete valori in secondi, attraverso la funzione SUM sommo tali valori traducendoli in secondi, il mio problema e conteggiare i valori che non superano i 2820 secondi (47 minuti), allo stesso tempo ho l'esigenza che i valori che superano la soglia vengano comunque conteggiati a 2820.

    per intenderci se ho un valore di 4800 secondi, voglio trovare una funzione che mi calcoli i 4800 secondi a 2820 secondi, quindi dovrei tirare via le eccedenze e calcorale a 2820 sec.

    qui di seguto la mia query:

    // Minuti di Ieri
    $sql =" SELECT $db1.$tb1.calldate AS calldate , $db1.$tb1.dst AS dst, (SUM($db1.$tb1.billsec)/60) AS minuti FROM $db1.$tb1 WHERE $db1.$tb1.billsec > 30 AND $db1.$tb1.dst IN (0,$inst,$ccv) AND $db1.$tb1.dst NOT IN ('s','i','hang','#') AND $db1.$tb1.calldate between '$yesterdayin' and '$yesterdayout' ";

    ringrazio anticipatamente per chi può darmi una dritta.

    orazio
    oraposso@yahoo.it

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    19

    sempre io

    Dimenticavo, la mia query funziona benissimo, e solo per far capire meglio. Ovviamente manca la parte che a me serve.

  3. #3
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Fammi capire se ho capito bene.

    Tu hai un campo contenente i secondi. Vorressti avere la somma dei valori in quel campo con la seguente logica

    se valore <= 2820 allora somma il il valore
    altrimenti somma 2820.

    Ho interpretato bene la tua richiesta ? se fosse cosi' ti basterebbe un case.

    In caso negativo potresti rispiegare ?

  4. #4
    butta i risultati in una tabella temporanea, e aggiorna a 2820 i numeri maggiori di 2820. poi interroghi la temp per farci quello che vuoi

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    19

    per Mashin

    Si esatto hai capito bene.
    in pratica lui fa la somma solo di qui valori non includendo le eccedenze.

    esempio

    i miei valori in secondi:

    1745
    2450
    3844
    7450
    900

    Attualmente lui calcola tutto restituendomi i minuti per un totale di 273.15 Min

    nel 3844 cè un eccedenza di 1024 secondi e nel 7450 un eccedenza di 4630 secondi che non deve essere calcolata.

    quindi il risultto giusto dovrebbe essere di 178.91 Min

  6. #6
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Una roba del genere ?

    codice:
    SELECT
       SUM(CASE  WHENcampo<=2820 THEN campo
                       ELSE 2820
                END) AS SOMMA
       FROM
            .....
    Questo per la somma in secondi. Se la vuoi in minuti e' da dividere per 60.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    19

    per Mashin

    Come possoapplicarla a questa query:

    $sql =" SELECT $db1.$tb1.calldate AS calldate , $db1.$tb1.dst AS dst, (SUM($db1.$tb1.billsec)/60) AS minuti FROM $db1.$tb1 WHERE $db1.$tb1.billsec > 30 AND $db1.$tb1.dst IN (0,$inst,$ccv) AND $db1.$tb1.dst NOT IN ('s','i','hang','#') AND $db1.$tb1.calldate between '$yesterdayin' and '$yesterdayout' ";

  8. #8
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Non garantisco sulla sintassi

    codice:
    $sql =" SELECT 
                $db1.$tb1.calldate          AS calldate , 
                $db1.$tb1.dst                AS dst, 
                (SUM($db1.$tb1.billsec)/60) AS minuti,
                (SUM(CASE
                            WHEN $db1.$tb1.billsec <= 2820 THEN $db1.$tb1.billsec
                            ELSE 2820
                         END)/60)      AS minuti_corretti
            FROM 
                $db1.$tb1 
            WHERE 
                $db1.$tb1.billsec > 30 
            AND $db1.$tb1.dst IN (0,$inst,$ccv) 
            AND $db1.$tb1.dst NOT IN ('s','i','hang','#') 
            AND $db1.$tb1.calldate between '$yesterdayin' and '$yesterdayout' ";

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    19

    Per Mashin

    Ok grazie controllo se funziona e tifaccio sapere

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    19

    Per Mashin

    E perfetto, grazie mille

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