Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327

    [SQL] where solo su dati aggiornati

    Ho dei dati relativi a delle automobili suddivisi in due tabelle:
    1. la prima "automobili" contiene tutti i dati fissi come nome, marca ecc...
    2. la seconda "dati_automobili" invece contiene i dati variabili nel tempo come cilindrata, potenza ecc...
    Le due tabelle sono in relazione uno a molti.
    La separazione dei dati mi serve per registrare ogni modifica (con un campo timestamp) e poter tracciare uno storico dei dati nel tempo.

    Per avere solo gli ultimi dati aggiornati basta prendere la tabella automobili, il max(campo_timestamp) della tabella dati_automobili e fare la join. Il problema è quando aggiungo dei filtri, perchè cerca le corrispondenza indipendentemente dalla data .

    Esempio: prendimi tutte le auto che hanno 90 cavalli .
    codice:
    SELECT A.*, max(D.data_modifica_dati) 
    FROM automobili as A INNER JOIN dati_automobili As D USING (id_automobile) 
    WHERE D.potenza=90 GROUP BY A.id_automobile;
    Se per disgrazia c'è un'automobile che una volta aveva 90 cavalli, ma poi il dato è cambiato nel tempo, la query la tira fuori lo stesso perchè sembra dare la priorità al where, e poi al max(campo_timpestamp).

    Io vorrei che cercasse il dato di 90 cavalli solo nell'ultimo record in ordine di tempo di dati_automobile esistente per ciascuna automobile: se un'auto oggi ha 91 cavalli, non mi deve comparire nei risultati, anche se un anno fa ne aveva 90.
    In altre parole la consegna è: "prendimi tutte le auto che adesso hanno 90 cavalli ".

    Spero di farmi capire.

    Come risolvo?
    /* Let's Lead the Web to Its Full Potential */

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ti servirebbe un campo in più nella tabella dati_automobili. Quel campo ti consentirebbe di dire se un record è attivo o no. Cosi potresti scegliere tra tutti i record attivi.

  3. #3
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327
    Vero.
    Se non esiste una soluzione SQL-based senza toccare il db, faccio sicuramente così.
    Grazie!
    Spulciando sul manuale (Per la cronaca, sto usando MySQL 4.1) ho trovato una parte interessante sulle subqueries e max()...
    Forse sono sulla strada giusta...
    /* Let's Lead the Web to Its Full Potential */

  4. #4
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327

    Forse ce l'ho fatta... forse...

    Ho letto il paragrafo 3.6.2 del MySQL manual: "The row holding the maximum of a certain column".
    Ho semplicemente fatto la join come prima, ma ho aggiunto alla clausola la condizione
    codice:
    WHERE D.modifica_dati=(SELECT MAX(modifica_dati) WHERE id_automobile=A.id_automobile);
    Devo testare la query per bene, ma sembra che così funzioni.
    /* Let's Lead the Web to Its Full Potential */

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.