FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Saber número de registros distintos en una columna de una consulta.
Saludos al foro.
Quisiera saber el número de registros distintos para una columna obtenida a través de una consulta. Me explicaré: Tengo una consulta realizada sobre una BD de firebird 2.0. La consulta la realizo con el componente fibdataset de los fibplus mediante una sentencia sql parecida a esto:
Esto me devuelve una cantidad de datos de sensores, por ejemplo, s1, s2, s3, etc. Pero por ejemplo, puede ser que el sensor s4 no tenga datos recogidos entre la fecha1 y la fecha2. Quiero saber qué sensores son los que tienen datos. Esto es fácil de obtener mediante una consulta sql tal que:
El problema es que tanto la primera consulta como la segunda son bastante lentas (entre 1 y 2 minutos) porque la BD tiene millones de datos. La primera consulta no puedo dejar de hacerla (me devuelve una serie de datos con los que hago un gráfico y demás), pero la segunda es la que estoy tratando de no hacerla, es decir, de hacer algo más rápido. Que yo sepa, la propiedad filter no acepta la clausula 'distinct' (lo he probado y no), por lo que, pregunta 1: ¿Se puede hacer de alguna otra forma mediante filtros? Otra posibilidad sería hacer la consulta 2 sobre los resultados arrojados por la consulta 1 que son unos cuantos miles. Pregunta 2: ¿Se puede hacer esto? Resumiendo y sintetizando: 1: ¿Se puede obtener lo que hace la clausula 'distinct' mediante filtros? 2: Si lo anterior no se puede: ¿se puede hacer una consulta sobre los resultados de otra consulta (y cómo hacerlo)? Utilizo D7, FireBird 2.0, componentes fibplus, windows xp sp2. Gracias por adelantado. |
#2
|
||||
|
||||
Hola, te aconsejo utilizar procedimientos almacenados para ese tipo de consultas ya que tienes millones de datos (cosa que dudo ) y así optimizas la velocidad.
Saludos.
__________________
Mi BLOG - ¡Joder, leanse la guia de estilo! Las Palabras son enanas, los ejemplos gigantes. |
#3
|
|||
|
|||
Gracias enucemene.
Sin embargo, uf, procedimientos almacenados... ¿podías darme algún ejemplo? es que esto de los sp no lo llevo muy bien. ¿Por qué dudas de que la BD tenga millones de datos? Ahora mismo tengo 12.000.000 (aprox.) datos en la base. Doce millones y pico de datos. Te lo aseguro. |
#4
|
||||
|
||||
Hola, Aquí te dejo un pequeño manual de procedimientos almacenados válido también para Firebird:
http://www.firebird.com.mx/imagenes/...lmacenados.pdf Saludos
__________________
Mi BLOG - ¡Joder, leanse la guia de estilo! Las Palabras son enanas, los ejemplos gigantes. |
#5
|
|||
|
|||
Un procedimiento almacenado creo que no soluciona tu problema.
Es posible, sin embargo, que tus consultas puedan mejorar si incorporas un indice sobre el campo fecha (en caso que no lo tengas). Aunque puede definir una estrategia valida (a pesar de tener redundancia de datos) que consistiria en elaborar un trigger after insert (despues de insertar) sobre la tabla tablasensores que escriba a otra tabla llamada por ejemplo fechassensores, los campo de esta tabla pueden ser {fecha, sensor, contador}. Entonces cada vez que ingrese un registro a la tabla tablasensores, busque en la tabla fechassensores si existe un registro con la fecha y numero de sensor, en caso de no existir crea el registro con los valores {fecha, sensor, 1}; en caso que ya exista un registro, simplemente le sumas uno al campo contador. Defini el campo contador por si necesitas saber cuantas registros por fecha hay para cada sensor.
__________________
Luis Fernando Buelvas T. |
#6
|
|||
|
|||
Olvidaba comentar que luego hacer consultas en la fechassensores va a ser relativamente facil y por supuesto muchisimo mas rapido.
Logicamente el sacrificio que tendra el sistema es que sera mas lento la entrada debido a las verificaciones, faltaria saber que tan alto es el volumen de registros por unidad de tiempo (por ejemplo cuantos registros po minuto) entran a la base de datosa ver si esta estrategia pueda trabajar de manera eficiente.
__________________
Luis Fernando Buelvas T. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como saber numero de registros de una tabla usando un clientdataset? | acl_gandalf | Conexión con bases de datos | 11 | 26-06-2023 19:09:19 |
Saber el número de registros llenos en un campo | mmmbopzombie | Tablas planas | 2 | 28-11-2005 09:54:31 |
Query, como saber el numero de Registros ? | Pascual Montes | Conexión con bases de datos | 5 | 09-12-2004 17:14:17 |
Saber cuantos registros origino la consulta | JorgeBec | SQL | 1 | 12-11-2004 16:48:17 |
Saber el numero de registros consultados | estudiante | SQL | 2 | 13-05-2003 00:12:09 |
|