SQL - Alguna forma de Mejorar esta consulta?

   
Vista:

Alguna forma de Mejorar esta consulta?

Publicado por Valentín (2 intervenciones) el 04/04/2011 20:40:51
La idea es hacer una consulta donde me muestren los mensajes enviados y no enviados en un rango de fecha, cada fila debe contener el detalle de ese dia.

estoy usando SQL Server 2008
tabla = BZ_Mensaje
campo con la fecha = FechaHoraAplicacionEstado
campo con el estatus del mensaje = CodigoEstadoMensaje

2 = enviados
3 = no enviados


Esta consulta muestra la sumatoria de mensajes enviados y no enviados en el rango de las fechas, pero lo que necesito es el detalle diario.

--------------------------------------------------------
Consulta

SELECT

YEAR(FechaHoraAplicacionEstado) AS ano, -- año
MONTH(FechaHoraAplicacionEstado) AS mes,
DAY(FechaHoraAplicacionEstado) AS dia,

(SELECT COUNT(*) FROM BZ_Mensaje WHERE CodigoEstadoMensaje = 2 AND
YEAR(FechaHoraAplicacionEstado) = 2011 AND
MONTH(FechaHoraAplicacionEstado)= 03 AND
DAY(FechaHoraAplicacionEstado) = 27) AS enviados,

(SELECT COUNT(*) FROM BZ_Mensaje WHERE CodigoEstadoMensaje = 8 AND
YEAR(FechaHoraAplicacionEstado) = 2011 AND
MONTH(FechaHoraAplicacionEstado)= 03 AND
DAY(FechaHoraAplicacionEstado) = 27) AS no_enviados

FROM BZ_Mensaje

WHERE

YEAR(FechaHoraAplicacionEstado) = 2011 AND
MONTH(FechaHoraAplicacionEstado)= 03 AND
DAY(FechaHoraAplicacionEstado) = 27

GROUP BY

YEAR(FechaHoraAplicacionEstado),
MONTH(FechaHoraAplicacionEstado),
DAY(FechaHoraAplicacionEstado)

---------------------------------------------------------------------
Resultado de la consulta
ano mes dia enviados no_enviados
2011 3 25 224398 36543
2011 3 26 224398 36543

---------------------------------------------------------------------
Resultado esperado y/o deseado

ano mes dia enviados no_enviados
2011 3 25 119331 24971
2011 3 26 105067 11572
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Alguna forma de Mejorar esta consulta?

Publicado por Leonardo Josué (877 intervenciones) el 06/04/2011 17:01:58
Buenos días Valentín:

No entendí muy bien cuál es la lógica que estás haciendo para obtener la consulta, sobre todo por el hecho de cómo manejas los rangos de fechas, ya que nunca manejas rangos, sino que estás preguntando por un año, mes y día específico... dale un vistazo a esta consulta, creo que podría servir... obtiene el total de mensajes enviados y no enviados para toda la tabla, si necesitas sólo un rango de fechas, filtrarías la información en la sección del where.

select year(FechaHoraAplicacionEstado) anio,
month(FechaHoraAplicacionEstado) mes,
day(FechaHoraAplicacionEstado) dia,
sum(case when CodigoEstadoMensaje = 1 then 1 else 0 end) Enviados,
sum(case when CodigoEstadoMensaje = 2 then 1 else 0 end) No_Enviados
from bz_mensaje
group by
year(FechaHoraAplicacionEstado),
month(FechaHoraAplicacionEstado),
day(FechaHoraAplicacionEstado)

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Alguna forma de Mejorar esta consulta?

Publicado por Valentín (2 intervenciones) el 07/04/2011 15:38:57
Funciono perfecto, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar