Consulta sql maximos
Hola
Tengo un problemilla con una consulta. Estoy haciendo unas estadisticas en builder para mi programa usando interbase, por ejemplo una consulta muy sencilla es seleccionar los clientes q mas compran en el gimnasio: SELECT C.IDCLIENTE, NOMBRE, DNI, COUNT(IDVENTA) AS NUMVENTAS FROM CLIENTE C INNER JOIN VENTA V ON C.IDCLIENTE = V.IDCLIENTE GROUP BY C.IDCLIENTE,NOMBRE,DNI; El problema es q cuando hay muchos clientes muestro a todos, entonces queria seleccionar por ejemplo solo a los 5 clientes q mas compran, y eso ya no lo se hacer pq tampoco tengo mucho nivel de sql. A ver si alguien me puede ayudar y no se me complica mucho. Gracias Un saludo |
Con la consulta que tienes, puedes ordenar (ORDER BY) por NUMVENTAS descendente (DESC) y usar un TOP para quedarte con los 5 primeros.
Algo así:
|
Muchas gracias, pero no me funciona, y por lo que vi en la ayuda del interbase, no existe esa funcion, nose si habra otra equivalente.
Un saludo |
Saludos.
En Interbase/Firebird tienes SKIP, FIRST y ROWS. |
Buff, no se muy bien como usar esos operadores(first,row....). Buscando por internet encontre que interbase no tiene operadores especiales para limitar el tamaño de una consulta. A ver si alguien me puede ayudar en la consulta que os enseñe mas arriba.
Un saludo y mil gracias |
Saludos.
Cita:
NO especificas que versión del motor estas utilizando, por ejemplo SKIP esta desde Interbase 6, FIRST en FireBird >= 1.5 y por ultimo ROWS en Interbase >= 6.5 y Firebird >= 2. Ejemplos:
|
Yo utilizo el interbase 6.0, y no me permite ninguna de esas funciones, asi que no creo q pueda hacer nada, pero gracias por todo.
Un saludo |
Pues si tienes Interbase 6 (Open Source) puedes fácilmente migrar a FireBird 2.1 sin muchos contratiempos. Y así podrás obtener mayor estabilidad y velocidad con este motor.
|
El problemas es que es para el proyecto fin de carrera, y la tutora solo me deja en este interbase, que la verdad que me da mil problemas.
Quise poner una condicion para disminuir el numero de registros a mostrar: SELECT C.IDCLIENTE,NOMBRE, DNI, COUNT(IDVENTA) AS NUMVENTAS FROM ( CLIENTE C INNER JOIN VENTA V ON C.IDCLIENTE=V.IDCLIENTE) WHERE NUMVENTAS > 1 GROUP BY NOMBRE,DNI,C.IDCLIENTE; y me dice q la columna NUMVENTAS es desconocida, q yo creo q en otros programas funciona bien. Muchas gracias a todos y perdonar pero es q es lo ultimo para terminar el proyecto. |
Hila
Saludos |
Muchas gracias funciona perfecto, y por lo menos arreglo un poco el problema del first, top,....
Muchisimas gracias por la ayuda |
Mejores Clientes...
Crea el siguiente procedimiento:
Y lo llamas así:
Saludos y nos platicas como te fue... Gerardo Suárez Trejo. (Y si te sacas diez de calificación en la tesis: 5 para tí y 5 para mi :D) |
Hola, perdona la tardanza pero como ya dije es que trabajo y hasta estas horas no tengo tiempo libre. No me va, me da un error de que no se puede crear el procedimiento, supongo que sera esta version del interbase que me da mil fallos, pero no te preocupes pq lo consegui arreglar con 'where'. No obstante guarde ese procedimiento para otras veces.
Muchas gracias por este magnifico foro y vuestra ayuda un saludo |
La franja horaria es GMT +2. Ahora son las 11:06:23. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi