Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

avg en squl server 2005 no me funciona

Estas en el tema de avg en squl server 2005 no me funciona en el foro de SQL Server en Foros del Web. Hola. señores del foro. Talvez tenga un error en la definicion de mis datos pero lo cierto es que al ejecutar el siguiente query me ...
  #1 (permalink)  
Antiguo 10/06/2008, 17:48
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
avg en squl server 2005 no me funciona

Hola. señores del foro.

Talvez tenga un error en la definicion de mis datos pero lo cierto es que al ejecutar el siguiente query me arroja error en ave y en sum

select distinct sum(sop_duracion) as tiempotot,min(sop_duracion) as tiempomin,max(sop_duracion) as tiempomax,avg(sop_duracion) as tiempopro from soporte WHERE sop_fechaini BETWEEN '2008-01-01' AND '2008-02-02'AND (SUBSTRING(sop_fechaini,6,2)>='01' or SUBSTRING(sop_fechaini,6,2)<='02')

el campo sop-fechaini esta definido varchar(8) y sop_duracion datetime, lo que no entiendo es porque si muestra los datos de max y min.

Por adelantado gracias a quien pueda a yudarme
  #2 (permalink)  
Antiguo 11/06/2008, 09:54
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Alguien sabe con que instruccion en sql server 2005 puedo obtener el promedio y la suma de horas o tiempo. en postgres lo utilizaba con sum(nombredelcampo) y avg nombre(nombredelcampo) pero aqui en sql no funciona.

Al correr la sentencia sale error "El tipo de datos datetime del operando no es válido para el operador sum"
  #3 (permalink)  
Antiguo 11/06/2008, 12:43
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: avg en squl server 2005 no me funciona

Consulta por DATEDIFF(xx, FechaInicial, FechaFinal)

Donde xx puede ser:

yy = año
mm = mes
dd = dia
hh = hora
mi = minuto
etc.
  #4 (permalink)  
Antiguo 12/06/2008, 07:57
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: avg en squl server 2005 no me funciona

bueno ahi me agarras, hasta ahora no eh tratado de sacar el promedio de un listado de fechas... pero intente... convertir el tipo de fechas a un valor Numerico y luego sacarle el AVG y depsues convertirlo a un valor datetime pero parece que no me da el valor exacto... igual te paso la consulta... a ver si lo modificas o nose a lo mejor me falta algo mas...

Cita:
Declare @Valor numeric(19)
Select @Valor = avg(convert(numeric(19),Campo_Date,112)) from Tabla
Select convert(datetime,@Valor,112)
  #5 (permalink)  
Antiguo 12/06/2008, 17:27
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Mil gracias iislas y rommel por las respuesta. y les cuento que probe con la sentencia de rommel y me trae el dato pero en ceros ejm 2008-02-02 00:00:00.000, veo que DATEDIFF(xx, FechaInicial, FechaFinal) me sirve solo para la diferencia entre una hora y otra.

Si saben de algo mas agradezco me lo cuenten.
  #6 (permalink)  
Antiguo 13/06/2008, 18:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: avg en squl server 2005 no me funciona

A ver si entendi, usted tiene un campo donde guarda FECHA y HORA INICIAL y otro donde guarda FECHA y HORA FINAL, ¿cierto?

Si usted hace DATEDIFF(hh, FechaIni, FechaFin), ¿No le da la suma de las horas?
  #7 (permalink)  
Antiguo 18/06/2008, 14:56
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Es cierto: el datediff me muestra la diferencia. mi caso o pregunta es porque en el siguiente query no me funciona el SUM y el AVG en cambio el MIN y el MAX si me funcionan.

select distinct sum(sop_duracion) as tiempotot,min(sop_duracion) as tiempomin,max(sop_duracion) as tiempomax,avg(sop_duracion) as tiempopro from soporte WHERE sop_fechaini BETWEEN '2008-01-01' AND '2008-02-02'AND (SUBSTRING(sop_fechaini,6,2)>='01' or SUBSTRING(sop_fechaini,6,2)<='02')

mil gracias por cualquier ayuda
  #8 (permalink)  
Antiguo 18/06/2008, 15:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: avg en squl server 2005 no me funciona

Aunque no trabajo en sql server, trataré de ofrecerte alguna orientación. El problema es que no puedes sacar sumas ni medias de time sin más. Necesitas convertir el campo time a segundos, y luego sumar o hacer la media, para finalmente volver a convertir en time.
En MySQL 5 usamos sec_to_time y time_to_sec para hacer este tipo de cosas. Creo que SQL server también existen esas funciones...

SELECT sec_to_time( SUM( time_to_sec( campohora ) ) ) AS sumatiempo FROM tabla

Prueba con algo parecido

Última edición por jurena; 18/06/2008 a las 15:51
  #9 (permalink)  
Antiguo 19/06/2008, 08:16
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Mil gracias Jurena por la respuesta. probe la instrucion y me arroja el siguiente error: 'time_to_sec' no es un nombre de función integrada reconocido.

Parece que debo seguir la remendacion de convertir el campo a segundos antes guardarlo en la base de datos, luego en la consulta hallar la media y convertirla en time al momento de mostrarla.

Nuevamente agradezco tu ayuda.
  #10 (permalink)  
Antiguo 19/06/2008, 08:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: avg en squl server 2005 no me funciona

Como te dije, desconozco la sintaxis de SQL server, pero seguro que encontrarás alguna función que haga lo mismo. Seguro que alguien de este foro puede echarte una mano. Abre un nuevo post preguntando por la función que convierte un formato time a segundos y viceversa. Yo probé en MysQL y funcionó. Lamento no poder ayudarte más, y tampoco sé decirte si es preferible convertir a segundos y guardar los segundos en la tabla o guardar en un campo time y tratar de encontrar la función o lo que sea que haga lo mismo que hacen las funciones de MySQL. Ah, y si te sigues preguntando por qué el máximo y el mínimo sí salía, te diré que cuando aplicas una función de ese tipo a un campo de tipo fecha o tiempo, trabaja sobre un número, con o sin decimales, que representa día, hora, minutos y segundos, y ciertamente el máximo y el mínimo, es decir el número más alto y el más bajo corresponden el time mayor y menor respectivamente; pero eso es decimal y estamos hablando de horas, minutos y segundos. Espero no estar diciendo ninguna barbaridad.

Última edición por jurena; 19/06/2008 a las 09:04
  #11 (permalink)  
Antiguo 19/06/2008, 09:17
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses
Puntos: 38
Respuesta: avg en squl server 2005 no me funciona

Una pregunta?

En el campo de duracion se almacena solo horas? o tambien dias?

Si solo se almacena horas tal vez podrias utilizar algo como esto...

Primero se convierten a milisegundos, se saca el promedio y luego se convierte a hora sumando los ms a la fecha minima...


Código:
if object_id('tempdb..#tmpTiempo') is not null Drop Table #tmpTiempo
create table #tmpTiempo (tiempo datetime)


Insert into #tmpTiempo values('19000101 02:00.00')
Insert into #tmpTiempo values('19000101 03:00.00')



Select dateadd(ms, avg(datediff(ms, '19000101 00:00.00',tiempo)),'19000101 00:00.00') avg_column
from #tmpTiempo

avg_colum
------------------------------------------------------ 
1900-01-01 02:30:00.000
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #12 (permalink)  
Antiguo 19/06/2008, 17:45
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Agradezco las respuesta y le cuento: en el campo duracion estaba almacenando la fecha,hora, minutos y segundos en el formato "yyyy-dd-mm hh:mm:ss" ya que el campo estaba definido tipo datetime, pero ahora lo cambie el campo por varchar y estoy almacenando la duracion en segundos. luego a la hora de mostrar los datos la llevo al formato "hh:mm:ss"

Con este cambio todo anda bien tanto para guardar, cambiar y retirar registros. En estos momentos tengo difcultad en hallar la suma (sum) y el promedio (avg) de la duracion ya que el campo esta definido tipo varchar.

Con vuestra ayuda voy resolviendo los inconvenientes y por tanto tengo que agradecerle mucho al foro.
  #13 (permalink)  
Antiguo 19/06/2008, 18:18
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Señores del foro. dentro de la siguiente consulta como puedo convertir un dato tipo varchar a entrero o cualquier otro que me de la suma y el promedio.

select distinct sum(sop_duracion) as tiempotot,avg(sop_duracion) as tiempopro from soporte WHERE CONVERT(VARCHAR(12),sop_fechaini,112)>='20080619' and CONVERT(VARCHAR(12),sop_fechaini,112)<='20080619'
  #14 (permalink)  
Antiguo 20/06/2008, 09:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: avg en squl server 2005 no me funciona

vpino y amigos de SQL Server,

seguro que digo alguna barbaridad, porque no trabajo con SQL Server, pero la diré y si es necesario me sonrojaré luego con vuestros comentarios:
A mí no me gusta la idea de convertir un datetime a varchar, si puedo hacer un casting a decimal y sobre él hacer las medias, suma, etc., y luego hacer un casting de vuelta a datetime.
algo tal que así. No sé si funcionará, pero tal vez merezca la pena hacer la prueba...
CAST(SUM(CAST(campodatetime AS DECIMAL (12, 5))) AS DATETIME)
  #15 (permalink)  
Antiguo 20/06/2008, 17:56
Avatar de vpino  
Fecha de Ingreso: diciembre-2004
Ubicación: colombia
Mensajes: 265
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: avg en squl server 2005 no me funciona

Ok. Furena. tendre encuenta la recomendacion porque en cualquier momento lo voy a necesitar.
Por el momento el problema fue solucionado cambiando el tipo de dato en la base de datos a int (lo tenia varchar) con esto pude harcer los calculos de avg y sum. lo que espero es no tener problemas mas adelante con datos demasiados grandes ya que tengo entendido que en este tipo de campo puedo alamacenar hasta 2147483647

Hasta pronto y gracias a todos por vuestra ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:15.