SQL Server Performance

reportes.

Discussion in 'Preguntas sobre SQL Server en Español.' started by Tronich, Sep 26, 2005.

  1. Tronich New Member

    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 />
  2. amayral New Member

    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
  3. Tronich New Member

    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


  4. amayral New Member

    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
  5. amayral New Member

    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
  6. Tronich New Member

    ok muchas gracias

    pero como le puedo pasar a la query que escribiste el mes que deseo consultar?
  7. amayral New Member

    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
  8. Tronich New Member

    gracias, probaré
  9. lbueno2001 New Member

    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.......
  10. Luis Martin Moderator

    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.



Share This Page