Query SQL per selezionare una riga distinta con un valore minimo

Voglio un’istruzione SQL per ottenere la riga con un valore minimo.

Considera questa tabella:

id game point 1 x 5 1 z 4 2 y 6 3 x 2 3 y 5 3 z 8 

Come seleziono gli ID che hanno il valore minimo nella colonna point , raggruppati per partita? Come questo:

 id game point 1 z 4 2 y 6 3 x 2 

Uso:

 Select tbl.* From TableName tbl Inner Join ( Select Id,MIN(Point) MinPoint From TableName Group By Id )tbl1 On tbl1.id=tbl.id Where tbl1.MinPoint=tbl.Point 

Questo funzionerà

 select * from table where (id,point) IN (select id,min(point) from table group by id); 

Poiché viene contrassegnato solo con sql , quanto segue utilizza ANSI SQL e una funzione finestra :

 select id, game, point from ( select id, game, point, row_number() over (partition by game order by point) as rn from games ) t where rn = 1; 

Questo è un altro modo di fare la stessa cosa, che ti permetterebbe di fare cose interessanti come selezionare i primi 5 giochi vincenti, ecc.

  SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, * FROM Table ) X WHERE RowNum = 1 

Ora puoi ottenere correttamente la riga effettiva identificata come quella con il punteggio più basso e puoi modificare la funzione di ordinamento per utilizzare più criteri, come “Mostrami il primo gioco con il punteggio più basso”, ecc.

La risposta di Ken Clark non ha funzionato nel mio caso. Potrebbe non funzionare anche nel tuo. In caso contrario, prova questo:

 SELECT * from table T INNER JOIN ( select id, MIN(point) MinPoint from table T group by AccountId ) NewT on T.id = NewT.id and T.point = NewT.MinPoint ORDER BY game desc 
 SELECT * from room INNER JOIN ( select DISTINCT hotelNo, MIN(price) MinPrice from room Group by hotelNo ) NewT on room.hotelNo = NewT.hotelNo and room.price = NewT.MinPrice; 

Provare:

 select id, game, min(point) from t group by id