Encontrar filas de forma concisa desde hace menos de 6 meses en MySQL

Estoy tratando de encontrar entradas en mi tabla desde hace 6 meses hasta hoy. Aquí está la consulta que estoy ejecutando actualmente:

WHERE (DATE(l.date_fin) BETWEEN DATE(DATE_ADD(NOW(), INTERVAL -6 MONTH)) AND CURDATE())

Sin embargo, no me parece correcto: parece que hay una forma más concisa y/o más rápida de obtener los mismos resultados que esta consulta. ¿Existe tal manera?

preguntado el 31 de julio de 12 a las 10:07

¿Puede haber entradas en las que date_fin sea posterior al día de hoy? Si no, puede probar lo siguiente: DATE_SUB(CURDATE(),INTERVAL 6 MES) <= l.date_fin; -

4 Respuestas

Esto debería ser suficiente para obtener lo que quieres:

WHERE l.date_fin > CURRENT_DATE() - INTERVAL 6 MONTH;

Respondido 31 Jul 12, 19:07

¿Qué tal algo como esto?

SELECT l.date_fin FROM table WHERE TIMESTAMPDIFF(MONTH,l.date_fin,NOW()) < 6

Respondido 31 Jul 12, 10:07

manera fácil de hacer esto es:

WHERE DATE(l.date_fin) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AND CURRENT_DATE;

si tienes un índice en la columna date_fin luego, para obtener el mejor rendimiento, puede usar:

WHERE l.date_fin BETWEEN CAST(DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AS DATETIME) AND
    DATE_SUB(CAST(DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY) AS DATETIME), INTERVAL 1 MINUTE);

Respondido 31 Jul 12, 11:07

SELECT l.date_fin FROM table WHERE l.date_fin between current_date and  current_date+interval -6 month

Respondido 31 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.