Если нужно выбрать строки, имеющие некоторое максимальное (минимальное) значение, то на эту тему существует два классических решения: 1. Человекопонятное: SELECT a.id, a.param, a.contents FROM YourTable a INNER JOIN ( SELECT id, MAX(param) as maxpar FROM YourTable GROUP BY id ) b ON a.id = b.id AND a.param = b.maxpar 2. Логическое, через JOIN: SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.param < b.param WHERE b.id IS NULL Можно придумать и альтернативные варианты через вложенные подзапросы, WITH, EXISTS - но все они будут репликами этих двух базовых запросов. Экзотические варианты для специфического синтаксиса: SELECT * FROM t1 WHERE (id,param) IN ( SELECT id, MAX(param) FROM t1 GROUP BY id ) SELECT yt.id, yt.param FROM YourTable yt WHERE param = (SELECT max(param) FROM YourTable st WHERE yt.id=st.id) SELECT * FROM (SELECT * FROM table_name ORDER BY id,param desc) temp GROUP by id SELECT a.id, a.param FROM (SELECT id, param, ROW_NUMBER() OVER (PARTITION BY id ORDER BY param DESC) rank FROM YourTable) a WHERE a.rank = 1 #
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor