2011-07-13 11 views
11

Tengo un informe que está impulsado por una consulta SQL que tiene este aspecto:¿Cómo selecciono hace dos semanas en MYSQL?

SELECT batch_log.userid, 
     batches.operation_id, 
     SUM(TIME_TO_SEC(ramses.batch_log.time_elapsed)), 
     SUM(ramses.tasks.estimated_nonrecurring + ramses.tasks.estimated_recurring), 
     DATE(start_time) 
    FROM batch_log 
    JOIN batches ON batch_log.batch_id=batches.id 
    JOIN ramses.tasks ON ramses.batch_log.batch_id=ramses.tasks.batch_id 
    JOIN protocase.tblusers on ramses.batch_log.userid = protocase.tblusers.userid 
    WHERE DATE(ramses.batch_log.start_time) > "2011-02-01" 
    AND ramses.batch_log.time_elapsed > "00:03:00" 
    AND DATE(ramses.batch_log.start_time) < now() 
    AND protocase.tblusers.active = 1 
    AND protocase.tblusers.userid NOT in ("ksnow","smanning", "dstapleton") 
GROUP BY userid, batches.operation_id, date(start_time) 
ORDER BY start_time, userid ASC 

Dado que se trata de comparar con el tiempo desde el payperiod actual se produce un error.
Nuestros períodos de pago comienzan el domingo, el primer período de pago fue 2011-02-01 y nuestro último período de pago comenzó el 4 de este mes. ¿Cómo pongo eso en mi declaración Where para quitar el período de pago más reciente de la consulta?

EDITAR: Así que ahora estoy usando date_sub (now(), INTERVAL 2 WEEK) pero realmente necesito un día de la semana (SUNDAY) dado que es miércoles lo está cortando el miércoles.

+4

Consulte [Funciones de fecha y hora de MySQL] (http://dev.mysql.com/doc/refman/5.5/en/ fecha-y-hora-funciones.html), concretamente DATE_SUB() –

Respuesta

27

Quiere usar DATE_SUB, y como an example.

Específicamente:

select DATE_SUB(curdate(), INTERVAL 2 WEEK) 

te lleva dos semanas atrás. Inserta la parte DATE_SUB ... en tu sql y listo.

Editar por su comentario:

Salida DAYOFWEEK:

y se puede hacer algo en la línea de:

DATE_SUB(DATE_SUB(curdate(), INTERVAL 2 WEEK), INTERVAL 2 + DAYOFWEEK(curdate()) DAY) 

(no tengo una instancia de MySQL para probarlo en .. pero esencialmente restar el número de días después del lunes.)

2

La pregunta no está del todo clara, especialmente después de la edición - no está claro ahora es el "período de pago" de dos semanas de duración o d o ¿quieres las últimas dos semanas del último domingo? Supongo que el período es de dos semanas ... entonces primero necesita saber cuántos días ha estado sucediendo el último período (que desea ignorar, ya que aún no ha terminado). Para conseguir que el número de días que se puede utilizar como expresión

DATEDIFF(today, FirstPeriod) % 14 

donde FirstPeriod es 2011-02-01. Y ahora quitas ese número de días de la fecha actual en la consulta usando date_sub(). La expresión exacta depende de cómo se defina el período, pero debe obtener la idea ...

Cuestiones relacionadas