Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    851

    come ricavare id delle migliori offerte

    ho una tabella con tutte le offerte fatte da vari utenti per degli orologi
    le colonne di questa tabella sono
    id della tabella - id utente che ha fatto l'offerta - l'importo dell'offerta - l'id dell'orologio


    id - utente_id - offerta - orologio_id
    1 - 30 - 200€ - 7
    2 - 27 - 300€ - 7
    3 - 11 - 350€ - 7
    4 - 30 - 411€ - 7
    5 - 45 - 110€ - 8
    6 - 30 - 180€ - 8
    7 - 91 - 230€ - 8




    voglio ricavare tutti gli id degli orologi vinti da un determinato utente
    supponiamo che mi interessino gli orologi vinti dall'utente con id 30, non so scrivere la query:
    select orologio_id from offerte where utente_id = 30 AND (l'offerta di questo utente è stata la migliore)
    nel caso della tabella sopra dovrebbe restituirmi il valore 7 che è l'id dell'orologio vinto dall'utente con utente_id 30

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    851
    ho trovato quest'articolo che mi sembra spieghi come si dovrebbe fare la query ma non riesco ad applicarla, qualcuno mi sa aiutare?

    http://dev.mysql.com/doc/refman/5.7/...group-row.html

  3. #3
    SELECT
    T1.*
    FROM
    Orologi T1
    JOIN (SELECT orologio_id, MAX(OFFERTA) AS Offerta FROM Orologi GROUP BY orologio_id) T2 ON T1.orologio_id=T2.orologio_id AND T1.offerta=T2.Offerta
    AND T1.utente_id=30

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    851
    grazie optime, non riesco però a far funzionare la tua query su questa tabella

    nome tabella: offerta

    nome dei campi:
    off_id
    off_prezzo
    off_utente_id
    off_orologio_id

    ho provato a scriverla così:
    SELECT
    T1.*
    FROM
    offerta T1
    JOIN (SELECT off_orologio_id, MAX(off_prezzo) AS miglior_offerta FROM offerta GROUP BY off_orologio_id) T2 ON T1.off_orologio_id=T2.off_orologio_id AND T1.miglior_offerta =T2.miglior_offerta
    AND T1.off_utente_id=30

    però ho l'errore "Unknown column 'T1.miglior_offerta' in 'on clause'"

  5. #5
    sul mio sqlserver funzika, non so perché su mysql non vada...

  6. #6
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,019
    Quote Originariamente inviata da abcd1000 Visualizza il messaggio
    ho provato a scriverla così:
    SELECT
    T1.*
    FROM
    offerta T1
    JOIN (SELECT off_orologio_id, MAX(off_prezzo) AS miglior_offerta FROM offerta GROUP BY off_orologio_id) T2 ON T1.off_orologio_id=T2.off_orologio_id AND T1.miglior_offerta =T2.miglior_offerta
    AND T1.off_utente_id=30

    però ho l'errore "Unknown column 'T1.miglior_offerta' in 'on clause'"
    Prova così

    SELECT
    T1.*
    FROM
    offerta T1
    JOIN (SELECT off_orologio_id, MAX(off_prezzo) AS miglior_offerta FROM offerta GROUP BY off_orologio_id) T2 ON T1.off_orologio_id=T2.off_orologio_id AND T1.off_prezzo =T2.miglior_offerta
    AND T1.off_utente_id=30
    >Uranio Radioattivo<
    BINARY.SUN
    flickr

  7. #7
    giusto: miglior_offerta non fa parte di T1 (che è la tabella originale), va usato il campo corrispondente (off_prezzo). Uranio!

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    851
    funziona grazie!

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