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

consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Estas en el tema de consulta que traiga registros con fecha mayor a 5 dias a la fecha actual en el foro de Mysql en Foros del Web. Hola como seria una consulta sql,. donde busque registros que tenga una campo de la fecha mayor a 5, seria como agregarle un condicional, no ...
  #1 (permalink)  
Antiguo 30/11/2015, 08:49
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Hola como seria una consulta sql,. donde busque registros que tenga una campo de la fecha mayor a 5, seria como agregarle un condicional, no ? este me trae la diferencia entre 2 fechas timestampdiff pero el condicional tambien lo trae?
  #2 (permalink)  
Antiguo 30/11/2015, 08:51
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, 4 meses
Puntos: 2658
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Postea la query como la escribirías tu.
Partamos desde alli.
__________________
¿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 30/11/2015, 09:47
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

asi lo hariaaa

Código MySQL:
Ver original
  1. SELECT id_customer,date_add,TIMESTAMPDIFF(DAY,date_add,now()) dias FROM ps_orders WHERE current_state=5 AND id_customer=245260 AND dias>5  ORDER BY date_add DESC;
  #4 (permalink)  
Antiguo 30/11/2015, 09: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, 4 meses
Puntos: 2658
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

TE sugiero que uses una escritura más ortodoxa de las funciones. Podrían fallarte y no sabrías por qué.

Por otro lado, si lo que necesitas es aquellos registros que en un campo tengan fechas posteriores a cinco días adelante, eso es más sencillo.
Suponiendo que tu tabla tiene una columna para fecha, llamada "FECHA"

Código MySQL:
Ver original
  1. SELECT id_customer, dias
  2. FROM ps_orders
  3. WHERE current_state=5
  4.     AND id_customer=245260
  5.     AND  fecha >= ADDDATE(fecha, interval 5  DAY)

Suponiendo que es un datetime:

Código MySQL:
Ver original
  1. SELECT id_customer, dias
  2. FROM ps_orders
  3. WHERE current_state=5
  4.     AND id_customer=245260
  5.     AND  DATE(fecha) >= ADDDATE(DATE(fecha), interval 5  DAY)

La consulta que propusiste no te va a funcionar jamás porque estás intentando validar en el WHERE invocando el alias que se crea en el SELECT, y eso no se permite en ningún DBMS. Para poder validar "DIAS" en el WHERE deberías transformar toda la consulta en una subconsulta y con eso se genera una tabla derivada, donde SI puedes usar los alias internos como nombres de columna.
__________________
¿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 30/11/2015, 11:11
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

bueno mira tengo una consulta donde devuelve, 4 registros 2 pertenecen a un mismo id, y 2 son de distintos, lo que quiero es que me traiga 3 registros osea los que son del mismo id los junte,
pero esos 2 que se juntan que traiga solo el mas reciente...

pense algo como

para estos registros::

id / date

1-- 2015-03-26
2-- 2015-11-27
1-- 2014-11-13
3-- 2014-07-07


osea en los registros que tenga el usuario 1, que solo me traiga el mas reciente el de la fecha 2015-03-26, ademas de los otros registros de los otros usuario

Código MySQL:
Ver original
  1. SELECT DISTINCT n.a,n.a,n.b
  2.             FROM(SELECT id_customer a, date_add b FROM ps_orders WHERE current_state=5 AND  now() >= ADDDATE(date_add, interval 5 DAY) ORDER BY date_add DESC) n
  3.             ORDER BY n.b ASC

Última edición por vani18; 30/11/2015 a las 11:18
  #6 (permalink)  
Antiguo 30/11/2015, 11:20
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, 4 meses
Puntos: 2658
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Eso es más fácil, todavía...
Código MySQL:
Ver original
  1. SELECT id_customer, MAX(fecha) fecha
  2. FROM ps_orders
  3. WHERE current_state=5
  4.     AND  fecha >= ADDDATE(fecha, interval 5  DAY)
  5. GROUP BY id_customer ASC;



¿Has estudiado algún tutorial o leido un manual?
Pregunto porque estas consultas son muy simples, bastante basicas, y a mi entender los ejemplos de los tutoirales te alcanzarían para entender cómo escribirlas.

Por otro lado, te recomiendo NUNCA usar palabras simples en inglés para los nombres de las columnas, porque puedes chocarte con palabras reservadas y eso generaría errores de sintaxis de dificil detección.
Lo menciono por el ultimo ejemplo, donde usas "DATE" para mencionar el nombre de la columna. Es una palabra reservada.

Posdata: Esto es simple basura:
Código MySQL:
Ver original 
No tiene ningún efecto. La comparación debe hacerse CONTRA UN CAMPO DE LA TABLA, y no contra el resultado de la función NOW().
La condición, escrita de esa forma no tiene ningún sentido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 30/11/2015, 11:22
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

ah pero yo decia la fecha maxima de cada registro de un usuario distinto, en el caso de que haiga mas de uno, no el maximo de todos....
  #8 (permalink)  
Antiguo 30/11/2015, 11:27
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, 4 meses
Puntos: 2658
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Cita:
NO ES DE USO HABITUAL




Voy a suponer que tu no lo usas habitualmente... Porque en realidad es una de las funciones de agrupación más comunes en todos los SP que conozco, de todas las bases que he manejado y manejo, junto con MIN(), SUM(), COUNT() y AVG()...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 30/11/2015, 11:29
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

osea al agregar MAX toma todos, y devuelve un solo registro,
yo necesitaria un MAX pero con un GROUP_BY osea el maximo de cada usuario, en los registros de ejemplo que puse el usuario 1 devolvia 2 registros, yo quiero que me traiga del usuario 1 la fecha mas reciente
  #10 (permalink)  
Antiguo 30/11/2015, 11:41
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

alguna idea, o lo hago con PHP... ya no se si se podra con mysql
  #11 (permalink)  
Antiguo 30/11/2015, 11:55
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, 4 meses
Puntos: 2658
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Cita:
Iniciado por vani18 Ver Mensaje
osea al agregar MAX toma todos, y devuelve un solo registro,
yo necesitaria un MAX pero con un GROUP_BY osea el maximo de cada usuario, en los registros de ejemplo que puse el usuario 1 devolvia 2 registros, yo quiero que me traiga del usuario 1 la fecha mas reciente
Pues simplemente le pones la condición necesaria, lo mismo que antes...
Código MySQL:
Ver original
  1. SELECT id_customer, MAX(fecha) fecha
  2. FROM ps_orders
  3. WHERE current_state=5
  4.     AND id_customer = 1
  5.     AND  fecha >= ADDDATE(fecha, interval 5  DAY)
  6. GROUP BY id_customer ASC;

En serio, estas son cosas muy básicas. Los ejemplos de cualquier tutorial deberían alcanzarte para entender cómo se usa tanto el MAX() como el GROUP BY.
__________________
¿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 30/11/2015, 12:05
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

no quiero que me agrupe los id(id_usuario),y de ahi me los ordene a los id, quiero que agrupe por usuario pero que me deje solo la fecha mayor (date) de cada usuario
  #13 (permalink)  
Antiguo 30/11/2015, 12:24
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, 4 meses
Puntos: 2658
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Pues eso es lo que está haciendo esa consulta...

- El GROUP BY aplciado a id_customer hace que sólo devuelva un único registro por cada id_customer.
- El MAX() sobre la fecha, devuelve sólo la mayor fecha relacionada con el customer_id a quien esa fecha pertenece.

En consecuencia, la query sin filtrar el id_customer, devolvería esto:

Cita:
1-- 2015-03-26
2-- 2015-11-27
Y filtrando por id_customer = 1, devovlería esto:
Cita:
1-- 2015-03-26
que es exactamente lo que quieres:
Cita:
osea en los registros que tenga el usuario 1, que solo me traiga el mas reciente el de la fecha 2015-03-26, ademas de los otros registros de los otros usuario
Ahora bien, en tu primer post pedías esto:
Cita:
donde busque registros que tenga una campo de la fecha mayor a 5
en base a eso yo supuse que lo que querías era que la fecha de la tabla fuese posterior al dia actual. Pero parece que so que pusiste alli simplemente no tenía ninguna utilidad en la consulta. No sé para qué lo pedías nipara qué se supone que lo mpusiste en tu query, pero como te dije, no tenia ni sentido ni utilidad.

Así pues, eliminemos esa condición sin sentido, y tendrás lo que quieres:


Código MySQL:
Ver original
  1. SELECT id_customer, MAX(fecha) fecha
  2. FROM ps_orders
  3. WHERE current_state=5
  4.     AND id_customer = 1
  5. GROUP BY id_customer ASC;
__________________
¿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 30/11/2015, 12:35
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

ah bien pibe, tienes un 10
  #15 (permalink)  
Antiguo 30/11/2015, 14:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta que traiga registros con fecha mayor a 5 dias a la fecha actual

Una ovacion de pie a gnzsoloyo por la paciencia demostrada ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: actual, campo, dias, fecha, mayor, registros, sql
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 10:01.