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

Duda con Select

Estas en el tema de Duda con Select en el foro de Mysql en Foros del Web. Saludos: tengo la siguiente duda, tengo que presentar un reporte con algunos campos que requiero , donde ingreso datos de lunes a sabado. Mi consulta ...
  #1 (permalink)  
Antiguo 20/10/2010, 22:06
 
Fecha de Ingreso: octubre-2010
Mensajes: 15
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Duda con Select

Saludos:

tengo la siguiente duda, tengo que presentar un reporte con algunos campos que requiero , donde ingreso datos de lunes a sabado.

Mi consulta en un principio era

SELECT DISTINCT
TRAB.id AS 'ID',
TRAB.IdCliente As 'Numero Cliente',
BASE.Nombre as 'Nombre Cliente,
TRAB.FechaTrabajos as 'Fecha Trabajo'
Campo X
Campo X
FROM Trabajos as TRAB
LEFT OUTER JOIN baseCarga as BASE
ON TRAB.IdCliente = BASE.IdCliente
WHERE TRAB.FechaTrabajo = (curdate() - 1)
ORDER BY TRAB.FechaTrabajo;

Es algo similar,necesito los reportes con un dia de desface, sin embargo mi problema radica el dia Lunes, cuando necesito sacar la gestion del Sabado.
Pense hacerlo con un if, pero no lo logro hacer, es decir, el dia lunes deberia cambiar el curdate()-1 a curdate()-2 ya que no hay nadie que pueda obtener el reporte el dia domingo, que corresponde a los ingresos del sabado, por no laburar aquel dia.


Saludos
  #2 (permalink)  
Antiguo 21/10/2010, 05:50
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: Duda con Select

Tal vez con algo así:
Código MySQL:
Ver original
  1.   T.id ID,
  2.   T.IdCliente `Numero Cliente`,
  3.   B.Nombre `Nombre Cliente`,
  4.   T.FechaTrabajos `Fecha Trabajo`
  5. FROM Trabajos as T LEFT JOIN baseCarga B ON T.IdCliente = B.IdCliente
  6. WHERE T.FechaTrabajo = DATE_SUB(curdate(), INTERVAL IF(DAYOFWEEK(curdate()) = 2, 2, 1) DAY)
  7. ORDER BY T.FechaTrabajo;

DAYOFWEEK(date) devuelve un número entre 1 y 7 para cada día de la semana, comenzando la misma en día DOMINGO. Entonces si el día es 2, es lunes y en ese caso el IF() devuelve 2 y si no 1.
DATE_SUB es la función correcta de sustracción de un período a una fecha determinada. Si no te gusta, puedes hacer la resta directa.

LEFT OUTER JOIN está usado por compatibilidad en MySQL, pero si lo vas a usar ten en cuenta que según el manual de referencia (Sintaxis de JOIN):
Cita:
La sintaxis { OJ ... LEFT OUTER JOIN ...} mostrada en la lista precedente existe sólo por compatibilidad con ODBC.
O sea: Si no vas a usar ODBC, entonces no es necesaria esa sintaxis.
Lee el manual.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: domingo, select
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 13:22.