none
sacar promedio de fechas RRS feed

  • Pregunta

  • Hola Amigos 

     tengo dos colummnas, el dato tiempo hora salio de generar  el query : datediff(HOUR , CreatedDate, ClosedDate)as TiempoHora

    como hago para sacar el promedio total de toda la columna de tiempohora?


    Gracias por su ayuda

    miércoles, 16 de septiembre de 2020 23:58

Todas las respuestas

  • Hola leoce20:

    Aunque no das muchos datos de tu escenario, te propongo 3 posibles soluciones.

    Create table dbo.horasAvg (id int identity(1,1), otherCol char(1), CreatedDate datetime, ClosedDate datetime)
    go
    Insert into dbo.horasAvg (otherCol, CreatedDate, ClosedDate)
    values
    ('a','20200916 15:45:23.000','20200917 12:21:23.000'),
    ('b','20200917 10:45:23.000','20200917 12:21:23.000'),
    ('c','20200916 15:45:23.000','20200917 12:21:23.000'),
    ('d','20200917 09:45:23.000','20200917 12:21:23.000');
    go

    Con el escenario planteado.

    • Opción 1:
    -- opcion 1 Funciones de ventana.
    Select otherCol
    	 , datediff(hour,CreatedDate, ClosedDate) as difHour	
    	 , avg(datediff(hour,CreatedDate, ClosedDate)) over(order by (select null)) as media
    from dbo.horasAvg;

    Utilizar la función Avg con Over, para calcular el promedio de la columna calculada.

    Avg

    https://docs.microsoft.com/es-es/sql/t-sql/functions/avg-transact-sql?view=sql-server-ver15

    • Opción 2
    -- opcion 2 Cross join
    SELECT h.otherCol,  datediff(hour,CreatedDate, ClosedDate) as difHour, d.difHour as media
    FROM  dbo.horasAvg h CROSS JOIN
    (
    	Select AVG(
    		  datediff(hour,CreatedDate, ClosedDate)) as difHour	
    	from dbo.horasAvg
    ) AS d

    Hacemos la media en una tabla derivada, y realizamos un cross join sobre la tabla externa.

    Tabla derivada

    https://javifer2.wordpress.com/2019/11/06/tabla-derivada/

    Cross join

    https://www.essentialsql.com/cross-join-introduction/

    • Opción 3
    -- opción 3 Subquery
    Select h.otherCol, datediff(hour,CreatedDate, ClosedDate) as difHour, 
    (Select AVG(
    		  datediff(hour,CreatedDate, ClosedDate)) as difHour	
    	from dbo.horasAvg) as media
    from dbo.horasAvg h

    Utilizar una subquery, si bien parece la menos recomendable, realmente el plan de ejecución de la consulta, será el mismo, que el de la opción anterior.

    Subconsultas

    https://docs.microsoft.com/es-es/sql/relational-databases/performance/subqueries?view=sql-server-ver15

    jueves, 17 de septiembre de 2020 3:37