
Optimizar consulta
Publicado por Oriol (4 intervenciones) el 11/01/2007 17:19:18
Haber como lo planteo: tengo que crear un listado resultante de una consulta sobre un registro de entradas en un parking. En dicho listado deben aparecer aquellas matriculas que no existen en la BD y que hayan entrado en los ultimos 3 meses, apareciendo como datos necesarios la fecha de la ultima entrada y el numero de veces que ha entrado.
Ahora mismo hago el listado en tres pasos, primero obtengo las distintas matriculas:
SELECT DISTINCT([Registro].[Matricula]) FROM [Registro] WHERE ([Registro].[Acceso] = 0) AND ([Registro].[Sentido] = 1) AND ([Registro].[Fecha] >= FORMAT(NOW-90,"YYYYMMDD")) AND NOT EXISTS (SELECT * FROM [Matriculas] WHERE ([Registro].[Matricula] = [Matriculas].[Codigo]))
Luego, recorro cada matricula (en un recordset) y hago una busqueda de su ultima fecha y hora:
SELECT TOP 1 [Registro].[Fecha], [Registro].[Hora] FROM [Registro] WHERE ([Registro].[Sentido] = 1) AND ([Registro].[Matricula] = '" & rsMATR("Matricula") & "') ORDER BY [Registro].[Fecha] DESC, [Registro].[Hora] DESC
Y por ultimo obtengo el contador con el numero de veces que ha entrado:
SELECT COUNT(*) AS [CONTADOR] FROM [Registro] WHERE ([Registro].[Sentido] = 1) AND ([Registro].[Matricula] = '" & rsMATR("Matricula") & "') AND ([Registro].[Fecha] >= FORMAT(NOW-90,"YYYYMMDD"))
Todos los datos los pongo en una rejilla y punto. El problema me viene en que, aunque funciona, tarda muchisimo.
¿A alguien se le ocurre como acortar las consultas o algo asi para optimizar el tiempo?
Muchas gracias.
Ahora mismo hago el listado en tres pasos, primero obtengo las distintas matriculas:
SELECT DISTINCT([Registro].[Matricula]) FROM [Registro] WHERE ([Registro].[Acceso] = 0) AND ([Registro].[Sentido] = 1) AND ([Registro].[Fecha] >= FORMAT(NOW-90,"YYYYMMDD")) AND NOT EXISTS (SELECT * FROM [Matriculas] WHERE ([Registro].[Matricula] = [Matriculas].[Codigo]))
Luego, recorro cada matricula (en un recordset) y hago una busqueda de su ultima fecha y hora:
SELECT TOP 1 [Registro].[Fecha], [Registro].[Hora] FROM [Registro] WHERE ([Registro].[Sentido] = 1) AND ([Registro].[Matricula] = '" & rsMATR("Matricula") & "') ORDER BY [Registro].[Fecha] DESC, [Registro].[Hora] DESC
Y por ultimo obtengo el contador con el numero de veces que ha entrado:
SELECT COUNT(*) AS [CONTADOR] FROM [Registro] WHERE ([Registro].[Sentido] = 1) AND ([Registro].[Matricula] = '" & rsMATR("Matricula") & "') AND ([Registro].[Fecha] >= FORMAT(NOW-90,"YYYYMMDD"))
Todos los datos los pongo en una rejilla y punto. El problema me viene en que, aunque funciona, tarda muchisimo.
¿A alguien se le ocurre como acortar las consultas o algo asi para optimizar el tiempo?
Muchas gracias.
Valora esta pregunta


0