Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    66

    SQL !Prendere l'ultimo record inserito per data

    Ciao sto impazzendo con una query:
    allora ho 2 tabelle una che contiene modelli, matricole e l'altra che contiene le letture fatte su quelle matricole.

    la relazione tra quelle tabelle è 1 - molti infatti una matricola puo avere piu letture.

    i record della tabella letture contengono un campo data che infatti identifica in che data appunto sono state fatte le letture.

    COME FACCIO A FARE QUESTA QUERY :
    PESCAMI DI UNA DETERMINATA LETTURA L'ULTIMA INSERITA PER DATA?

    ho provato usando MAX sul SELECT MA mi riporta un errore

    Impossibile eseguire una query che non include l'espressione <nome> specificata come parte di una funzione di aggregazione.

    questa è la query

    SELECT PLW_MAT.matricola, PLW_MAT.modello, PLW_MAT.tipofat, max(PLW_LET.data) as maxdata, PLW_LET.letnero, PLW_LET.letcolori
    FROM PLW_MAT INNER JOIN PLW_LET ON PLW_MAT.idmat = PLW_LET.idmat
    GROUP BY PLW_MAT.idana =[ID];

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    select *
    from PLW_LET
    where data =
    (select MAX(data)
    from PLW_LET)

    guarda che potrebbe ritornare più record

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    66
    No forse non è chiaro. hai letto bene la query?

    io devo ricavare una tabella mi riporta tutte le macchine di un cliente determinato (INFATTI c'è il WHERE) e mi mostra SOLO L'ultima lettura.

    Come la metti tu non è detto che mi l'ultima data inserità in assoluto corrisponda a quel cliente!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    33
    prova con

    SELECT PLW_MAT.matricola, PLW_MAT.modello, PLW_MAT.tipofat, max(PLW_LET.data) as maxdata, PLW_LET.letnero, PLW_LET.letcolori
    FROM PLW_MAT INNER JOIN PLW_LET ON PLW_MAT.idmat = PLW_LET.idmat
    WHERE PLW_MAT.idana =[ID]
    GROUP BY PLW_MAT.matricola, PLW_MAT.modello, PLW_MAT.tipofat, PLW_LET.letnero, PLW_LET.letcolori
    ;

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    66
    ok con la modifica al group by la query funziona ma mi mostra tutti i record è come se non prendesse il valore max della data per matricola, mostra tutte le date.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    33
    In effetti hai ragione: se tra i campi nella select ci sono campi della tabella PLW_LET non funziona.

    Se ti servono altri campi della tabella PLW_LET, devi fare una "inner query" ovvero:

    SELECT PLW_MAT.matricola, PLW_MAT.modello, PLW_MAT.tipofat,
    B.maxdata, B.letnero, B.letcolori
    FROM PLW_MAT,
    (select max(PLW_LET.data) as maxdata, PLW_LET.letnero, PLW_LET.letcolori, PLW_LET.idmat
    FROM PLW_LET
    AND PLW_MAT.idmat = PLW_LET.idmat ) B
    WHERE PLW_MAT.idana =[ID]
    GROUP BY PLW_MAT.matricola, PLW_MAT.modello, PLW_MAT.tipofat;

    prova così

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    33
    Annulla la risposta di ieri sera: mi sono accorta che non è corretta...
    Prova con questa:

    SELECT PLW_MAT.matricola, PLW_MAT.modello, PLW_MAT.tipofat,
    PLW_LET.data as maxdata, PLW_LET.letnero, PLW_LET.letcolori
    FROM PLW_MAT, PLW_LET
    where PLW_MAT.idana =[ID]
    AND PLW_MAT.idmat = PLW_LET.idmat
    and (PLW_MAT.idmat, PLW_LET.data) in (select idmat, max(data) from PLW_LET group by idmat)


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.