reportes. | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

reportes.

Hola amigos, e aqui nuevamente para consultarle a los gurús del sql.<br /><br />bueno les recuerdo que re100 me estoy inciando en este ambiente del sql, no pido que me hagan el trabajo sino que me orienten de que forma hacerlo para no perder tanto tiempo leyendo libros y manuales, que la verdad no muestran lo que realmente ando buscando.<br /><br />bueno, aca voy con mi preguntilla de día<br /><br />necesito hacer el sig reporte, siguiendo en el ambiente de la telefonía y call centers.<br /><br />tengo una tabla con aprox 3.000.000 de registros con todas las llamadas telefónicas entrantes, estos registran la duracion de la llamada, fecha y hora de ingreso, cantidad de llamadas abandonadas, etc….<br /><br />necesito hacer un reporte diario, mensual y semanal<br /><br />entregar total de llamadas ingresadas, trasferidas y abonadas. esto supongo que debo sacarlo solamente con un COUNT.<br /><br />pero debo detallar cantidad, porcentaje (del día) respecto al total de ingresadas, total de conversación y total en minutos.<br /><br /><br />como les decia antes, mi inencion no es que me hagan la tarea, sino que me orienten que clausulas debo usar y cmo se usan.<br /><br />por ejemplo se que para sacar un intervalo de tiempo debo usar el between, pero no me resulta <img src=’/community/emoticons/emotion-6.gif’ alt=’:(‘ /><br /><br />bueno, espero no haberlos aburrido y que me ayuden<br />gracias<br /><br /><br />
Lo que sería interesante es conocer cómo deseas devolver los resultados, o cuál es la aplicación que va a mostrar los resultados. Por que si por ejemplo, vas a usar Crystal Reports, es muy sencillo enviar un recordset con los registros y diseñar en el report todas las estadísticas que te hagan falta. Saludos No existe algoritmo perfecto, todo es mejorable
debo realizar una aplicacion en ASP para mostrar los resultados (aun no llego a esa parte) parece que me apresure demasiado en abordar la tarea.
lo primero que debo lograr es obtener la cantidad de registros que pertenecen a un mes x tengo un campo llamado ConnectedDate en el cual estan todas las fechas y horas de ingreso de una llamada. de la siguiente forma: 27-08-2005 9:58:12 la pregunta es: como es mas optimo buscar los registros que corresponden a x mes? por ejemplo si quiero buscar las del mes de agosto debería hacer algo asi? SELECT COUNT(*) FROM myTable WHERE ConnectedDate BETWEEN (01-08-2005 and 30-08-2005) no se como buscar un intervalo de fechas. gracias

Hola, Lo que dices es correcto, para buscar fechas puedes usar el Between y si el campo de búsqueda tiene íondice mejor. Pero la sintaxis correcta es la siguiente: SELECT COUNT(*) FROM myTable WHERE ConnectedDate BETWEEN ’01/08/2005′ and ’30-08-2005′
Pero por ejemplo, también podrías escribir lo siguiente: SELECT datepart(year,ConnectedDate) as Anyo, datepart(month, ConnectedDate) as Mes, COUNT(*) as Registros FROM myTable WITH (NOLOCK) GROUP BY datepart(year,ConnectedDate), datepart(month, ConnectedDate) ORDER BY Anyo DESC, Mes DESC Yo siempre que leo datos uso la opcion WITH (NOLOCK) para cada tabla del SELECT. Saludos No existe algoritmo perfecto, todo es mejorable
Como puedes ver hay un error en el post anterior, el separador del campo fechas debe ser el mismo en ambos lados del BETWEEN y AND. Y el formato de fecha va a depender de la opcion de lenguaje que tenga el servidor de la BDD. Saludos. No existe algoritmo perfecto, todo es mejorable
ok muchas gracias pero como le puedo pasar a la query que escribiste el mes que deseo consultar?
Ahora empezamos mejor… Tú lo que deberías hacer es un stored procedure, no es el algoritmo perfecto pero es una buena introducción al manejo de los mismos, al menos, para devolver datos … por ejemplo: CREATE PROCEDURE dbo.RegistroMensual
@Anyo int
, @Mes int
AS
SET NOCOUNT ON SELECT datepart(year,ConnectedDate) as Anyo
, datepart(month, ConnectedDate) as Mes
, COUNT(*) as Registros
FROM myTable WITH (NOLOCK)
WHERE datepart(year,ConnectedDate) = @Anyo
AND datepart(month, ConnectedDate) = @Mes
GROUP BY datepart(year,ConnectedDate), datepart(month, ConnectedDate)
ORDER BY Anyo DESC, Mes DESC Luego ejecutálo así: exec dbo.RegistroMensual 2005, 8
exec dbo.RegistroMensual 2005, 9 No existe algoritmo perfecto, todo es mejorable
gracias, probaré
en realidad si buscas por rangos deberas usar between (si tiene indices mejor)y es cierto usando el mismo formato en ambos criterios, si es una fecha especifica usar campofecha=fecha , no uses conversiones al campo year(fecha)=? and month(fecha)=? and day(fecha)=? esto le quita performance, si desea prueba en el sql usando mostrando el plan de ejecucion…y veras los resultados Suerte. espero te haya servido…….
Qué bueno ver nueva gente ayudando en este forum!!!! Muchas Gracias!
Luis Martin
Moderator
SQL-Server-Performance.com All in Love is Fair
Stevie Wonder
All postings are provided “AS IS” with no warranties for accuracy.
]]>