01/03/2011, 06:13
|
| | Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 8 meses Puntos: 0 | |
Optimización de consulta con 1 sola tabla Hola, ¿qué tal? Escribo este mensaje porque estoy un tanto desesperadillo
Tengo la siguiente tabla con fechas, nombres de aplicaciones y cantidades de usuarios:
------------------------
CREATE TABLE [dbo].[TABLA_APLICACIONES](
[FECHA] [datetime] NOT NULL,
[APLICACION] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[USUARIOS] [int] NULL
) ON [PRIMARY]
---------------
Necesito tener la suma de usuarios para dos grupos distintos de aplicaciones, en cada momento existente y para un día concreto (en el ejemplo uso getdate(), pero es la parte que parametrizo)
La query de abajo funciona, pero tarda unos 5 minutos en generar la respuesta,
y eso deja colgados ciertos procesos. La tengo que hacer mucho más rápidamente.
¿Alguien sabe de alguna alternativa más rápida?
Muchas gracias a todos
---------------
SELECT SUBSTRING(LEFT(CONVERT(CHAR(8), MAIN.FECHA, 108), 5), 1, 5) AS HORAS,
(SELECT SUM(PAR.USUARIOS)
FROM dbo.TABLA_APLICACIONES PAR
WHERE PAR.FECHA = MAIN.FECHA
AND (PAR.APLICACION LIKE 'APLICACION_SSO_PAR' OR
PAR.APLICACION LIKE 'APLICACION_PA_SSO_PAR' OR
PAR.APLICACION LIKE 'APLICACION_PB_SSO_PAR')
GROUP BY PAR.FECHA
)
AS USUARIOS_PAR,
(
SELECT SUM(IMPAR.USUARIOS)
FROM dbo.TABLA_APLICACIONES IMPAR
WHERE IMPAR.FECHA = MAIN.FECHA
AND (IMPAR.APLICACION LIKE 'APLICACION_SSO_IMPAR' OR
IMPAR.APLICACION LIKE 'APLICACION_PA_SSO_IMPAR' OR
IMPAR.APLICACION LIKE 'APLICACION_PB_SSO_IMPAR')
GROUP BY IMPAR.FECHA)
AS USUARIOS_IMPAR
FROM dbo.TABLA_APLICACIONES MAIN
WHERE CONVERT(CHAR(12), MAIN.FECHA, 103) = CONVERT(CHAR(12), getdate(), 103)
GROUP BY MAIN.FECHA
ORDER BY MAIN.FECHA
------------------------------------
Última edición por oscaral; 01/03/2011 a las 06:19
Razón: aclaración de lo que necesito
|