Registros MYSQL SELECT anteriores a 1 año

2 minutos de lectura

avatar de usuario
Alex Grecu

Trato de obtener una lista de todos los registros que tienen más de 1 año de mi base de datos, el campo para expired_contract tiene la siguiente información.

expired_contract DATE NOT NULL

Entonces toma la FECHA en el siguiente formato: AÑO-MM-DD, luego tengo el sql que lamentablemente no puedo hacer que funcione.

$sql = "SELECT * 
        FROM My_Contracte 
        WHERE expired_contract >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
        ORDER BY id_contract DESC";

Probé muchos comandos “DÓNDE” pero ninguno funcionó como esperaba. ¿Puedes ayudarme a hacer que esto funcione? Estoy buscando esto durante aproximadamente 5 horas. Necesito el comando exacto para que funcione.

El $sql me da algo pero lo toma mal, obtengo fechas como: 2015-10-01, 2016-10-01 y la fecha como 2014-09-30 no aparece.

Básicamente quiero mostrar fechas como:

Si hoy es 2015-10-01, quiero ver fechas anteriores a 1 año, desde 2014-09-30 y no mostrar fechas como 2015-10-01, 2016-10-01.

¿Tal vez tengo que editar algo en la base de datos?

Buscando su ayuda, gracias!

  • ¿Esto ayuda? stackoverflow.com/a/12736181/128161

    –Jamie Bicknell

    1 oct 2015 a las 11:48

  • ¡Está funcionando, gracias amigo!

    – Alex Greco

    1 oct 2015 a las 12:03

Tienes que usar menor que en lugar de mayor o igual:

$sql = "SELECT * FROM My_Contracte WHERE expired_contract < DATE_SUB(NOW(),INTERVAL 1 YEAR) 

avatar de usuario
maestro yoda

SELECT * FROM My_Contracte WHERE (expired_contract NOT BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 YEAR) AND CURDATE()) and expired_contract<=NOW() ;

  • Sí, pero su función también toma desde el año 2017 más o menos. Lo hice funcionar con la ayuda de Jens y Jamie. También te agradezco la ayuda.

    – Alex Greco

    1 oct 2015 a las 12:06

SELECT SUM(impressions) AS impressions FROM My_Contracte  where DATE(expired_contract) BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 1 YEAR ) AND CURDATE( )

¿Ha sido útil esta solución?