Ramplas a mantención por fecha

Ahora te haré una nueva consulta que no me han podido responder.
Mira, necesito una consulta que devuelva las patentes de las ramplas que necesiten realizar un cambio de mazas en las ruedas. Para esto se realiza una vez al año, por ende, se compara la última fecha registrada en el check (Fecha_Check) con la fecha actual y si son igual o mayor a 365 días devolverá la patente para que vaya a mantención. Esta patente debe ser única, es decir, no se debe repetir la misma patente. Ademas se considerará además de la fecha registrada, la casilla registrada donde se le realizó el cambio de maza, pero sólo basta tomar la última fecha del check y verificar si está marcado la casilla (con -1). El código que tengo es este:
SELECT Check_Ramplas.Placa_Rampla, Last(Check_Ramplas.Fecha_Check) AS ÚltimoDeFecha_Check, Last(Check_Ramplas.Nombre_Conductor) AS ÚltimoDeNombre_Conductor
FROM Check_Ramplas
GROUP BY Check_Ramplas.Placa_Rampla, Check_Ramplas.Cambio_Mazas
HAVING (((Check_Ramplas.Cambio_Mazas)=-1) AND ((Abs(DateDiff("d",DMin("fecha_actual","Check_Ramplas","Placa_Rampla='" & [Placa_Rampla] & "'"),DMax("Fecha_Check","Check_Ramplas","Placa_Rampla='" & [Placa_Rampla] & "'")))+1)>=365));
El problema con este código es que con el "last" en las fechas me devuelve sólo una patente, a pesar que hayan 2 patentes distintas pero con la misma fecha y casilla marcada en las mazas. Ahora sin el "Last" en las fechas me aparece la misma patente y repetida con otras fechas, pero tampoco me sale la segunda patente y no sé por qué.
¿Qué hago?

1 respuesta

Respuesta
1
Pásame posibles datos de la base con los ejemplos que mencionás para que pueda hacer pruebas.
Ej
Fecha_Check       placa_Rampla      Cambio_Mazas       Fecha_Actual
02-03-2009 JA3792 -1 02-03-2010
02-03-2009 JA7016 0 02-03-2010
02-06-2009 JA1234 -1 02-03-2010
02-03-2009 JA1234 -1 02-03-2010
yap, con el ejemplo anterior la consulta debe devolver la placa JA3792 (FILA 1) y JA1234 (FILA 4). Si te fijas, la fila 3 y 4 tienen la misma placa pero se tomó en cuenta el de la fila 4 debido a que la fecha del check corresponde a un año con respecto a la actual. Ademas el de la fila 2 cumple que haya pasado un año pero no está marcado la casilla que se realizó un cambio de maza (en vez de -1 tiene un 0).
Espero que esté claro cualquier duda me dices no más.
A ver, tu consulta anterior la veo muy rebuscada, vamos a tratar de hacerla de 0 en base a lo que necesitás y el ejemplo que me diste:
select fecha_check
     , placa_rampla
         , cambio_mazas
  from check_ramplas
 where cambio_mazas = '-1'
   and datediff(now(),fecha_check) >= 365
El problema que vas a tener ahí es que si tenés una patente que esté marcada con "-1" y además haya sido hace más de un año (o sea, cumpla con las dos condiciones del where) y aparezca dos veces, va a aparecer dos veces en la consulta. ¿Si esto es factible desde el punto de vista del negocio avisame que vemos que hacemos (con cuál nos quedamos de todos los registros que puedan llegar a aparecer?)
Suerte!
Hola gracias por responder, me sale el siguiente error
Se utilizó un número incorrecto de argumentos con la función en la expresión de consulta 'datediff(now(), fecha_check) >= 365'.
No sé cuál es el error.
Otra cosa, si es un problema que aparezca 2 veces la patente.
Graciasssssssssssss
Ah, el problema es que no tengo access y lo estoy haciendo con MySQL, la función datediff es distinta. Si es un problema que aparezca dos veces hay que incluir un group by, poné min o max dependiendo si querés la menor fecha o la mayor dentro de ese rango:
select placa_rampla
, cambio_mazas
, max(fecha_check)
  from check_ramplas
 where cambio_mazas = '-1'
   and datediff("d",now(),fecha_check) >= 365
 group by placa_rampla, cambio_mazas
Hola, no me funciona bien, osea no me devuelve nada, ¿me podrías enviar tu correo por favor al mio que es [email protected] para enviarte mi base?
Ahí te lo envié, de todas formas me parece que el problema sigue estando en la función datediff de access, que es distinta que en mysql. Probá poniendo las fechas al revés:
select placa_rampla
, cambio_mazas
, max(fecha_check)
  from check_ramplas
 where cambio_mazas = '-1'
   and datediff("d",fecha_check,now()) >= 365
 group by placa_rampla, cambio_mazas
La info de cómo es datediff en access la saqué de acá:
http://www.techonthenet.com/access/functions/date/datediff.php
Analicé la consulta y efectivamente así funciona:
select placa_rampla
, cambio_mazas
, max(fecha_check)
  from check_ramplas
 where cambio_mazas = -1
   and datediff("d",fecha_check,now()) >= 365
 group by placa_rampla, cambio_mazas
Fíjate porque en los datos que me pasaste ninguno tiene más de 365 días, los modifiqué y les puse fecha de Febrero para que funcionen.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas