MySQL:如果一年中的这个月是一月,如何查询上个月的数据?

时间:2019-01-01 22:25:26

标签: php mysql

如果今年的当前月份为2019年1月,则我很难找到上个月(DECEMBER)的记录,该记录被视为2018年的月份。

这是我到目前为止已经尝试过的方法,但是它不显示记录。

 mysql_query("SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH(NOW())-1 ");
 //This must display all records of December of last year. 

但是在某些查询中,它可以工作。就像找到去年的记录一样:

 mysql_query("SELECT * FROM tbl_logs WHERE YEAR(date_added) = YEAR(NOW())-1 ");
 //This displays all records of last year

我的输出应该能够显示去年12月的所有记录。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以先使用date_sub减去一个月,然后使用month()year()提取月份或年份。

上个月:

SELECT *
       FROM tbl_logs
       WHERE month(date_added) = month(date_sub(now(), INTERVAL 1 MONTH));

去年:

SELECT *
       FROM tbl_logs
       WHERE year(date_added) = year(date_sub(now(), INTERVAL 1 MONTH));

但是更有效的方法是允许使用索引,因为它可以计算和使用范围。

上个月:

SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(date_sub(now(), INTERVAL 1 MONTH)),
                                  '-',
                                  lpad(month(date_sub(now(), INTERVAL 1 MONTH)), 2, '0'),
                                  '-',
                                  '01')
             AND date_added < concat(year(now()),
                                     '-',
                                     lpad(month(now()), 2, '0'),
                                     '-',
                                     '01');

去年:

SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(now()) - 1,
                                  '-01-01')
             AND date_added < concat(year(now()),
                                     '-01-01');

您想要的索引将在tbl_logs (date_added)上。

答案 1 :(得分:1)

这可能有点骇人听闻,似乎Sticky Bit有一个不错的答案,但是您可以尝试一下。

$currentDate = date("m", time());
        if($currentDate != 01){
            $currentDate--;
        }else{
            $currentDate = 12;
        }

然后插入$currentDate

$query = "SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH( " . $currentDate . " )";
mysql_query($query );