Ayuda consulta SQL!

Hola, vereis, tengo esta consulta de Mysql en la que salen la cantidad de peliculas hechas cada año:
SELECT DISTINCT s.year, max(s.cnt) as "maximo"
FROM (SELECT count(*) AS cnt,year
FROM movies
GROUP BY year) AS s
where s.year>0
GROUP BY s.year
order by maximo desc


Lo que da como resultado una columna con los años y otra con el número de películas de cada año. Pero lo que ocurre es que lo que quiero es quedarme con una sola fila, la que tenga el mayor número de películas (el primer resultado). Lo he intentado quedándome con el primer resultado, con un LIMIT, pero no hay manera...

Alguien me echa una mano?
Gracias!
SELECT TOP 1 DISTINCT s.year, max(s.cnt) as "maximo"
FROM (SELECT count(*) AS cnt,year
FROM movies
GROUP BY year) AS s
where s.year>0
GROUP BY s.year
order by maximo desc


no sé... eso es lo que se me ha ocurrido a mí... a ver si te vale
Muchas gracias, pero TOP es sólo para SQL Server, y esto es MySQL, que en teoría tiene su equivalente LIMIT, pero no me funciona... he intentado poner LIMIT 1 en distintas partes de la sentencia y no hay manera...
PiraBeLiO escribió:Muchas gracias, pero TOP es sólo para SQL Server, y esto es MySQL, que en teoría tiene su equivalente LIMIT, pero no me funciona... he intentado poner LIMIT 1 en distintas partes de la sentencia y no hay manera...


Lo tengo un poco olvidado pero creo que LIMIT lleva 2 valores, seria "Limit 1,1"

P.D: Limit va alfinal de la sentencia. Veo que Melado ya lo ha comentado también.
Yo uso el SQL de IBM (iSeries DB2), pero me imagino que será muy parecido, y lamento decirte que cuando yo quiero la primera fila de la consulta que he hecho, siempre he tenido que hacerlo por programa; es decir, con su FETCH correspondiente y por programa, cuando lea la primera linea, salir del bucle correspondiente.

Espero haber sido de ayuda.
En MySQL primero va el GROUP BY, luego el ORDER BY, y luego el LIMIT 1. Cualquier otro orden fallará, que probablemente es por lo que el LIMIT no te funcione.

carabirubi escribió:Yo uso el SQL de IBM (iSeries DB2), pero me imagino que será muy parecido, y lamento decirte que cuando yo quiero la primera fila de la consulta que he hecho, siempre he tenido que hacerlo por programa; es decir, con su FETCH correspondiente y por programa, cuando lea la primera linea, salir del bucle correspondiente.

¿En DB2 no basta con poner FETCH FIRST 1 ROWS ONLY? Obtener el resultado completo y quedarse con el primero es una chapuza muy gorda [+risas]
Ya lo siento, piloto de MSSQL. Pensaba que era T-SQL esa instrucción.
suerte y ponlo, así ya lo sé por si algún día nos hace falta a alguno.
melado escribió:En MySQL primero va el GROUP BY, luego el ORDER BY, y luego el LIMIT 1. Cualquier otro orden fallará, que probablemente es por lo que el LIMIT no te funcione.

carabirubi escribió:Yo uso el SQL de IBM (iSeries DB2), pero me imagino que será muy parecido, y lamento decirte que cuando yo quiero la primera fila de la consulta que he hecho, siempre he tenido que hacerlo por programa; es decir, con su FETCH correspondiente y por programa, cuando lea la primera linea, salir del bucle correspondiente.

¿En DB2 no basta con poner FETCH FIRST 1 ROWS ONLY? Obtener el resultado completo y quedarse con el primero es una chapuza muy gorda [+risas]

De momento, como hay que hacerlo (al menos todo lo que he visto) es de la siguiente manera (en DB2 de iSeries, claro):

c/exec sql
c+ declare cur1 cursor for
c+ select campos from fichero
c+ where condiciones
c+ group by campos
c+ order by campos
c/end-exec
*
c/exec sql open cur1
c/end-exec
*
c do *hival
c/exec sql
c+ fetch next from cur1 into :variables
c/end-exec
*
* condiciones
*
c enddo
c/exec sql close cur1
c/end-exec

Como verás, dentro de las condiciones tendría que hacer el calculo que quisiera, pero de todas formas, probaré con lo que me comentas, porque puede que sirva.

Un saludo.
Aquí tienes la sintaxis completa de la función SELECT en MySQL: http://dev.mysql.com/doc/refman/5.0/es/select.html

En tu caso debería servirte LIMIT 0, 1 o LIMIT 1.

Esto suponiendo que la consulta esté bien, que no me he parado a mirarla, la verdad.
8 respuestas