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

Extraer registros que tengan fecha menos a 30 días de antiguedad

Estas en el tema de Extraer registros que tengan fecha menos a 30 días de antiguedad en el foro de Mysql en Foros del Web. Buenas! Tengo una tabla donde se guardan unos epoch. Lo que quiero extraer son todos los epoch que tengan fecha menor a 30 dias. Estoy ...
  #1 (permalink)  
Antiguo 18/11/2009, 08:34
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Extraer registros que tengan fecha menos a 30 días de antiguedad

Buenas!

Tengo una tabla donde se guardan unos epoch.

Lo que quiero extraer son todos los epoch que tengan fecha menor a 30 dias.

Estoy medio perdido... alguna idea?

Gracias!
  #2 (permalink)  
Antiguo 18/11/2009, 09:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Cita:
Estoy medio perdido... alguna idea?
SI: Postea la estructura de las tablas, porque no nos estás dando ninguna información que sirva para crear una consulta o sugerirte una solución.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/11/2009, 12:00
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Cita:
Iniciado por gnzsoloyo Ver Mensaje
SI: Postea la estructura de las tablas, porque no nos estás dando ninguna información que sirva para crear una consulta o sugerirte una solución.
El campo se llama "last" que se usa para almacenar fechas que son epoch... Creo que lo habia comentado en el primer mensaje
  #4 (permalink)  
Antiguo 18/11/2009, 12:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Usa las funciones de fecha NOW() y TIMESTAMPDIFF()
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/11/2009, 12:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

SELECT last FROM tutabla WHERE TIMESTAMDIFF(DAY, last, NOW()) < 30
  #6 (permalink)  
Antiguo 18/11/2009, 15:57
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Cita:
Iniciado por jurena Ver Mensaje
SELECT last FROM tutabla WHERE TIMESTAMPDIFF(DAY, last, NOW()) < 30
Me esta devolviendo vacio...

Alguna idea?

un ej del valor un campo recien es: 1258553472
  #7 (permalink)  
Antiguo 18/11/2009, 17:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Zuker, si epoch son los segundos pasados desde 1970-01-01, puedes utilizar, creo, esto (te muestra la fecha y te trae los resultados buscados):
Código sql:
Ver original
  1. SELECT TIMESTAMPADD(SECOND, LAST, '1970-01-01') EPOCHTOFECHAHORA FROM tabla
  2.  WHERE TIMESTAMPDIFF(DAY, TIMESTAMPADD(SECOND, LAST, '1970-01-01'), NOW()) < 30
  #8 (permalink)  
Antiguo 19/11/2009, 06:04
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Gracias jurena, tengo una ultima pregunta

Quiero integrar esa condicion a mi consulta

Actualmente me arroja los 5 archivos mas descargados

Código:
SELECT id, name, downloads
										  FROM dl_files 
										  ORDER BY downloads DESC 
										  LIMIT 5
El tema es que si pongo la condicion en el where, no me arroja los resultados correctos.

Yo necesito que me arroje los 5 archivos mas descargados pero que se cumple que haya sido descargado en los ultimos 30 dias (Para eso la columna last, donde guarda el epoch de la ultima vez q fue descargado)

Gracias!

Saludos
  #9 (permalink)  
Antiguo 19/11/2009, 06:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Algo así:
Código sql:
Ver original
  1. SELECT id, name, downloads
  2. FROM
  3.    (
  4.    SELECT id, name, COUNT(*) downloads
  5.    FROM DIARIO
  6.    WHERE DATE(fecha) BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY name) t1
  8. ORDER BY downloads DESC
  9. LIMIT 5;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 19/11/2009, 07:39
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Algo así:
Código sql:
Ver original
  1. SELECT id, name, downloads
  2. FROM
  3.    (
  4.    SELECT id, name, COUNT(*) downloads
  5.    FROM dl_files
  6.    WHERE DATE(LAST) BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY name) t1
  8. ORDER BY downloads DESC
  9. LIMIT 5;
No me arroja ningun resultado, la fecha esta almacenada en un epoch
  #11 (permalink)  
Antiguo 19/11/2009, 07:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

¿Qué tipo de columna es epoch?

Esa es una de las razones por las que te dije al principio que postearas la estructura de la tabla... :-|
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 19/11/2009, 07:47
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Qué tipo de columna es epoch?

Esa es una de las razones por las que te dije al principio que postearas la estructura de la tabla... :-|

El tiempo Epoch es la hora actual medida en número de segundos desde el Epoch Unix. Epoch 0 es enero 1 1970 00:00:00 GMT (ISO 8601: 1970-01-01T00:00:00Z). No se usan segundos bisiestos en el tiempo Unix.

es un int
  #13 (permalink)  
Antiguo 19/11/2009, 07:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Tal vez por aquí:
Código sql:
Ver original
  1. SELECT id, name, downloads
  2. FROM
  3.    (
  4.    SELECT id, name, COUNT(*) downloads
  5.    FROM dl_files
  6.    WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY name) t1
  8. ORDER BY downloads DESC
  9. LIMIT 5;

Pero estaría mucho más seguro si me respondieras la pregunta: ¿Qué tipo de columna es epoch?
No estoy preguntando qué contiene, sino como lo almacenas.

¿Hay algún problema específico por el que no quieres postar la estructura de la tabla? Es un pedido habitual cuando algunos detalles son dudosos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 19/11/2009, 08:13
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tal vez por aquí:
Código sql:
Ver original
  1. SELECT id, name, downloads
  2. FROM
  3.    (
  4.    SELECT id, name, COUNT(*) downloads
  5.    FROM dl_files
  6.    WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY name) t1
  8. ORDER BY downloads DESC
  9. LIMIT 5;

Pero estaría mucho más seguro si me respondieras la pregunta: ¿Qué tipo de columna es epoch?
No estoy preguntando qué contiene, sino como lo almacenas.

¿Hay algún problema específico por el que no quieres postar la estructura de la tabla? Es un pedido habitual cuando algunos detalles son dudosos...
No! no hay ningun problema. En el anterior mensje te dije que last es un int!

Igualmente aca va la estructura :)



Por otro lado... recien probe la consulta y no me esta arrojando la informacion de forma correcta. Tengo archivos que fueron descargados mas de 200 veces en la ultima semana



Gracias y saludos
  #15 (permalink)  
Antiguo 19/11/2009, 08:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

¿Esta tabla tiene una entrada por cada descarga que se hace?
Más pareciera la tabla que contiene la descripción de los archivos a descargar. Si es la que guarda un registro por cada descarga hecha parece tener una enorme redundancia de datos...

Probemos afinar:
Código sql:
Ver original
  1. SELECT id, name, descargas downloads
  2. FROM
  3.    (
  4.    SELECT id, name, COUNT(downloads) descargas
  5.    FROM dl_files
  6.    WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY id) t1
  8. ORDER BY descargas DESC
  9. LIMIT 5;

Eso debería contar todas aquellas entradas donde `downloads`no tuviese un valor NULL. En caso de que pudiese tener un valor cero (0) y no un NULL, entonces debería ser:

Código sql:
Ver original
  1. SELECT id, name, descargas downloads
  2. FROM
  3.    (
  4.    SELECT id, name, SUM(IF(downloads!=0, 1, 0)) descargas
  5.    FROM dl_files
  6.    WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY name) t1
  8. ORDER BY descargas DESC
  9. LIMIT 5;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 19/11/2009, 08:46
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

La tabla contiene todos los archivos disponibles para descargar

downloads es la cantidad de veces descargada
last es la ultima vez que fue descargada
  #17 (permalink)  
Antiguo 19/11/2009, 08:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Se entendía por los posts algo diferente....

Entonces la consulta se vuelve simple:

Código sql:
Ver original
  1. SELECT id, name, downloads
  2. FROM dl_files
  3. WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY)  AND DATE(NOW())
  4. ORDER BY downloads DESC
  5. LIMIT 5;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 19/11/2009, 09:07
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Me esta arrojando valores como si no se filtrara la fecha, puede ser?
  #19 (permalink)  
Antiguo 19/11/2009, 09:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

Si. Porque esa tabla la única fecha de referencia que tiene para la consulta es cuándo se realizó la última descarga. Entonces, la única información extraíble es cuantas descargas tienen los archivos que más descargas tuvieron y cuya última descarga se hizo en los últimos 30 días.

Para poder saber cuáles son los archivos mas descargados de los último 30 días deberías hacer la consulta sobre la tabla que conserve la información de cada descarga realizada. Sólo de esa forma puedes saberlo.
Ahora bien, ¿cuál es esa tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 19/11/2009, 09:27
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

No se guardan esos datos, solamente se va actualizando la fecha de la ultima descarga.
Entonces creo que no puedo hacerlo... una lastima

Muchisimas gracias :)

Saludos
  #21 (permalink)  
Antiguo 19/11/2009, 09:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

¿No podrías crear esa tabla?
Sería en definitiva una tabla bastante simple (posiblemente tres campos).
Y cargarla debidamente sólo implicaría una sentencia de insert...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 19/11/2009, 09:45
Avatar de Zuker  
Fecha de Ingreso: marzo-2007
Ubicación: Argentina
Mensajes: 164
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

POdria, pasa que la tabla es parte de un producto de vbulletin que se va actualizando, y tendria que modificarlo..
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 18:12.