Visualizzazione risultati 1 fino 2 di 2

Discussione: Valore attuale e differenza con valore precedente

  1. #1
    phollia non è connesso Utente giovane
    Data registrazione
    05-02-2015
    Messaggi
    68

    Predefinito Valore attuale e differenza con valore precedente

    Ciao

    ho una tabella in cui vengono salvati dei valori numerici in date differenti e riferiti a persone.

    Avrei la necessità di estrarre, e quindi fare una SELECT che mi mostri per ogni riga sia il valore alla data ma anche la differenza rispetto al precedente.

    Provo a fare un esempio per cercare di rendere più chiara la cosa

    Tabella

    Codice:
    +----------+------------+--------+
    |   nome   |    data    | valore |
    +----------+------------+--------+
    |MARIO     |01/01/2020  | 10     |
    +----------+------------+--------+
    |MARIO     |01/02/2020  | 35     |
    +----------+------------+--------+
    |MARIO     |01/03/2020  | 80     |
    +----------+------------+--------+
    |GIUSEPPE  |01/01/2020  |  5     |
    +----------+------------+--------+
    |GIUSEPPE  |01/02/2020  | 26     |
    +----------+------------+--------+
    |GIUSEPPE  |01/03/2020  | 98     |
    +----------+------------+--------+
    |ROCCO     |01/01/2020  | 16     |
    +----------+------------+--------+
    |...       |...         | ...    |
    +----------+------------+--------+
    Mi servirebbe estrarre i dati così


    Codice:
    +----------+------------+--------+------------+
    |   nome   |    data    | valore | differenza |
    +----------+------------+--------+------------+
    |MARIO     |01/01/2020  | 10     | 0          |
    +----------+------------+--------+------------+
    |MARIO     |01/02/2020  | 35     | 25         |  <-- (35 - 10)
    +----------+------------+--------+------------+
    |MARIO     |01/03/2020  | 80     | 45         |  <-- (80 - 35)
    +----------+------------+--------+------------+
    |GIUSEPPE  |01/01/2020  |  5     | 0          |
    +----------+------------+--------+------------+
    |GIUSEPPE  |01/02/2020  | 26     | 21         |  <-- (26 - 5)
    +----------+------------+--------+------------+
    |GIUSEPPE  |01/03/2020  | 98     | 72         |  <-- (98 - 26)
    +----------+------------+--------+------------+
    |ROCCO     |01/01/2020  | 16     | 0          |
    +----------+------------+--------+------------+
    |...       |...         | ...    | ...        |
    +----------+------------+--------+------------+
    Precisando che le date nell'esempio sono sequenziali di un mese, ma realmente possono essere variabili e a cadenze non parametrizzate, come si imposta la SELECT per avere questo?

    Grazie
    Ultima modifica di phollia : 03-01-2022 alle ore 19.18.51

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Risposta un po' in ritardo: è possibile fare quello che ti serve, ma se come immagino vuoi la differenza solo con date predenti per lo stesso nome, allora la query diventa assai complessa e scomoda.

    Ti suggerirei di estrarre i dati normalmente, e poi calcolare le differenze in PHP. Uso un sistema simile per mostrare una classifica, e punteggi che migliorano, ed è molto flessibile.

    Qualcosa di questo genere:
    Codice PHP:
    $righe_tabella = [ query in ordine di data ]

    $valore_precedente = [];
    foreach (
    $righe_tabella as $riga) {
    $nome = $riga['nome'];
    if (isset(
    $valore_precedente[$nome])) {
    $riga['differenza'] = $riga['valore'] - $valore_precedente[$nome];
    }
    $valore_precedente[$nome] = $riga['valore'];
    }

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •