MySQL - consulta con doble BETWEEN

 
Vista:
Imágen de perfil de hernan

consulta con doble BETWEEN

Publicado por hernan (8 intervenciones) el 20/05/2008 17:45:59
Saludss que tal, tengo una duda.Espero me puedan orientar.

La cuestio esta asi. Tengo una consulta que Extrae varios registros por medio de un BETWEEN fecha1 and fecha2.(una validacion por fechas)

Y todo esta bien pero en la secuencia de registros quiero tambien incluir los registros que pueden o no estar en el primer BETWEEN. y que ademas cumplan con otra validacion de folios.

Ejp

SELECT movimientos_almptd.IdOrdenPro
FROM movimientos_almptd
LEFT JOIN movimientos_almpte ON movimientos_almpte.IdMovimiento = movimientos_almptd.IdMovimiento
WHERE movimientos_almptd.Estatus = 'ACTIVO' AND (movimientos_almpte.Fecha BETWEEN '2008/04/01' and '2008/05/01')

AND

(movimientos_almptd.IdDoctoAlm BETWEEN '708' AND '736')

pero esto me dara los registros que coincidan con los dos between, yo necesito que me de todos los registros que coincidan o no con cuaquiera de los dos.
Obviamente con OR pero no me da todos los que quiero.

Sale espero su opinion Saludss
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:consulta con doble BETWEEN

Publicado por Gonzalo GC (339 intervenciones) el 20/05/2008 17:55:47
Como yo lo veo, la cosa es simplemente aislar la condición de alternativa (OR):

SELECT movimientos_almptd.IdOrdenPro
FROM movimientos_almptd
LEFT JOIN movimientos_almpte
USING(dMovimiento)
WHERE movimientos_almptd.Estatus = 'ACTIVO'
AND (
(movimientos_almpte.Fecha BETWEEN '2008/04/01' and '2008/05/01')
OR
(movimientos_almptd.IdDoctoAlm BETWEEN '708' AND '736')
);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de hernan

RE:consulta con doble BETWEEN

Publicado por hernan (8 intervenciones) el 20/05/2008 18:15:35
asi es, significativamente. me trae los datos en ese rango, hay te va.

hay tres folios que no estan en ese rango de fecha y que deben estar en el rango de folios 733,734,735, pero no me los da. son del 5 de mayo.

En esencia es lo que necesito, que me de los folios que aunque no esten en el primer BETWEEN esten el segundo.

Me diras que los cambie de orden para que evalue primero los folios, pero tiene mayor precedencia para mis datos el rango de fecha, los folios son una ecepcion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con doble BETWEEN

Publicado por Gonzalo GC (339 intervenciones) el 20/05/2008 19:24:15
En ese caso hay que poner como condición el OR antes de los paréntesis.
SELECT movimientos_almptd.IdOrdenPro
FROM movimientos_almptd
LEFT JOIN movimientos_almpte
USING(dMovimiento)
WHERE movimientos_almptd.Estatus = 'ACTIVO'
OR (
(movimientos_almpte.Fecha BETWEEN '2008/04/01' AND '2008/05/01')
OR
(movimientos_almptd.IdDoctoAlm BETWEEN '708' AND '736')
);

Pero posiblemente se deba replantear todo el esquema para buscar eficiencia. Me parece que se está acumulando cierto nivel de falta de optimización.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de hernan

RE:consulta con doble BETWEEN

Publicado por hernan (8 intervenciones) el 20/05/2008 20:43:12
ok lo, reviso, gracias por tu ayuda, probare asi como comentas.

sale gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con doble BETWEEN

Publicado por edixon perez (2 intervenciones) el 28/05/2008 16:52:43
solamente deseo saber que son las consultas compuestas..por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con doble BETWEEN

Publicado por Gonzalo GC (339 intervenciones) el 28/05/2008 18:31:16
¿Te estás refiriendo a las subconsultas?
Las subconsultas son consultas que devuelven valores que son usados para realizar una consulta principal.
por ejemplo:
SELECT empleado_ID
FROM empleados
WHERE empleado_ID IN
(SELECT empleado_ID
FROM cargasSociales
WHERE edad>5);

Esta consulta imaginaria devovlería la lista de ID de empleados que tuviesen hijos en edad escolar. Como no todos los empelados tienen hijos no tiene sentido que los mismos figuren como campos de una tabla Empelados, además tampoco podrías definir cuántos campos necesitarías, así que se ponen en otra tabla denominada CargasSociales (de los empleados), relacionados con la otra tabla por el ID del empleado.
Eso es una subconsulta.
Ahora bien, ¿a eso te referías?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar