Je veux une instruction SQL pour obtenir la ligne avec une valeur minimale.
Considérez ce tableau:
id game point
1 x 5
1 z 4
2 y 6
3 x 2
3 y 5
3 z 8
Comment sélectionner les identifiants ayant la valeur minimale dans la colonne point
, regroupés par partie? Comme ça:
id game point
1 z 4
2 y 6
3 x 2
Utilisation:
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
Ça va marcher
select * from table
where (id,point) IN (select id,min(point) from table group by id);
C’est une autre façon de faire la même chose, ce qui vous permettrait de faire des choses intéressantes comme sélectionner le top 5 des jeux gagnants, etc.
SELECT *
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, *
FROM Table
) X
WHERE RowNum = 1
Vous pouvez maintenant obtenir correctement la ligne qui a été identifiée comme ayant le score le plus bas et vous pouvez modifier la fonction de classement pour utiliser plusieurs critères, tels que "Montre-moi le jeu le plus ancien ayant le score le plus petit", etc.
Comme ceci est étiqueté avec sql
uniquement, voici ce qui suit utilise ANSI SQL et une fonction window :
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;
La réponse de Ken Clark n'a pas fonctionné dans mon cas. Cela pourrait ne pas fonctionner dans le vôtre non plus. Sinon, essayez ceci:
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;