Foros del Web » Programando para Internet » PHP »

Promedio entre datetimes

Estas en el tema de Promedio entre datetimes en el foro de PHP en Foros del Web. Estaba necesitando hacer un promedio entre las fechas de "entradaMenor" devueltas por la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT DATE ( fecha ...
  #1 (permalink)  
Antiguo 12/12/2012, 13:00
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Promedio entre datetimes

Estaba necesitando hacer un promedio entre las fechas de "entradaMenor" devueltas por la siguiente consulta:

Código SQL:
Ver original
  1. SELECT DATE(fecha) dia, MIN(fecha) entradaMenor
  2.     FROM tabla
  3.     GROUP BY DATE(fecha);

Supongo que se podria resolver directamente en la consulta, pero realmente no doy con su solución. Desde PHP que función piensan que me pueda ayudar a trabajar con los datetime para hacer lo que necesito? Saludos
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #2 (permalink)  
Antiguo 12/12/2012, 13:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Promedio entre datetimes

Necesitas usar COUNT(*) y DATE(fecha) la otra no entiendo que quieres lograr.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 13/12/2012, 07:17
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Promedio entre datetimes

Perdon, no explique bien el problema, entradaMenor es un datetime, y lo que busco es el promedio del time, despreciando el date. Si fuese un número haria un sum y dividiria por el count, pero al ser date time no se me ocurre como hacerlo.

ejemplo:
10/03/2012 10/03/2012 08:00
11/03/2012 11/03/2012 13:00
12/03/2012 12/03/2012 09:00

Y lo que requiero es el promedio de los time 10:00, (las fechas tienen minutos tambien)
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #4 (permalink)  
Antiguo 13/12/2012, 08:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Promedio entre datetimes

Talves hay algo que me pierdo, pero del lado de PHP no bastaría con hacer el promedio de las horas en formato militar ?, de todas formas creo que seria mucho mas interesante resolverlo a nivel de bbdd, algo asi no te sirve ?

Código MySQL:
Ver original
  1. SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(created_at))) AS average ...

seguramente la gente del foro MySQL te pueda dar una mano.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 13/12/2012, 08:45
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Promedio entre datetimes

Pues aunque no tengo ahora a mano una base de datos con un datetime para hacer la prueba creo que lo podrias solucionar simplemente con sql. Igual existe una cosa rara y es que por un lado dices que agrupas por fecha y en el ejemplo de abajo dices que no te importa la fecha (para mi es mas logico que saques el promedio de la hora del mismo dia).

Yo haria un agrupamiento por la fecha y haria la suma de la hora usando la función time para extraer la hora. en otra columna contaria la cantidad de resultados de esa fecha y en otra columna colocaria la división de las dos primeras. Repito, como no tengo a mano una base de datos parecida para hacer la prueba no coloco el codigo pero espero haberme explicado bien.

Creo que asi podrias hallar la solución.

p.s. Mientras escribia mi post vi la solución de masterpuppet y si no te importa la fecha para hacer el promedio yo creo que deberia funcionar perfectamente.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 13/12/2012 a las 08:51
  #6 (permalink)  
Antiguo 14/12/2012, 06:41
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Promedio entre datetimes

Lo que me refiero cuando digo que excluyo la parte DATE del promedio, es decir, yo agrupo por fecha, pero el promedio solo quiero que sea de horas y Minutos. La tabla contiene "atenciones medicas" y mi objetivo es lograr el promedio en hh:mm de la primera atencion de cada dia, de un período dado.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #7 (permalink)  
Antiguo 14/12/2012, 08:04
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Promedio entre datetimes

Cita:
Iniciado por masterpuppet Ver Mensaje
Talves hay algo que me pierdo, pero del lado de PHP no bastaría con hacer el promedio de las horas en formato militar ?, de todas formas creo que seria mucho mas interesante resolverlo a nivel de bbdd, algo asi no te sirve ?

Código MySQL:
Ver original
  1. SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(created_at))) AS average ...

seguramente la gente del foro MySQL te pueda dar una mano.

Saludos.
Me iluminaste, voy a pasar el tiempo a segundos, sacar el promedioy vuelvo a convertirlo desde sql, gracias.

Listo, lo resolvi con algunas subconsultas. (Oracle)
Lastima que no exista una funcion time_to_sec como en mysql.

Código SQL:
Ver original
  1. SELECT to_char(to_date(SUM(c.time_en_segundos) / COUNT(1),'sssss'),'hh24:mi:ss')  promedio FROM
  2. (SELECT to_char(entradaMenor, 'HH24') * 3600 +  to_char(entradaMenor, 'MI') * 60 + to_char(entradaMenor, 'SS')  time_en_segundos
  3. FROM  (SELECT trunc(a.f_inicio) dia, MIN(a.f_inicio) entradaMenor
  4.         FROM t_atencion a
  5.         GROUP BY trunc(f_inicio)) b) c;
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Última edición por h2swider; 14/12/2012 a las 10:42

Etiquetas: promedio, tabla
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 17:39.