2017-01-20 139 views
0
WHERE 
    order_customFields.order_customFields_order_date >= '2016-12-01' AND 
    order_customFields.order_customFields_order_date <= '2016-12-31' 

如何選擇上個月的數據,而不是當前的日期 - 30天?例如,在1月的任何一天,它總是從1dec到31dec。選擇上個月

+0

不是當天是什麼意思? – denny

回答

1

這裏有一個方法:

WHERE order_customFields.order_customFields_order_date >= date_sub(date_sub(curdate(), interval day(curdate()) - 1 day), interval 1 month) and 
     order_customFields.order_customFields_order_date < date_sub(curdate(), interval day(curdate()) - 1 day) 

注意,表達式:date_sub(curdate(), interval day(curdate()) - 1 day)返回當月的第一天。

1

例如爲:

SELECT * FROM my_table; 
+------------+ 
| dt   | 
+------------+ 
| 2016-11-01 | 
| 2016-11-04 | 
| 2016-11-06 | 
| 2016-11-07 | 
| 2016-11-09 | 
| 2016-11-10 | 
| 2016-11-12 | 
| 2016-11-13 | 
| 2016-11-14 | 
| 2016-11-15 | 
| 2016-11-16 | 
| 2016-11-17 | 
| 2016-11-18 | 
| 2016-11-19 | 
| 2016-11-20 | 
| 2016-11-21 | 
| 2016-11-22 | 
| 2016-11-23 | 
| 2016-11-24 | 
| 2016-11-25 | 
| 2016-11-26 | 
| 2016-11-28 | 
| 2016-12-01 | 
| 2016-12-03 | 
| 2016-12-04 | 
| 2016-12-07 | 
| 2016-12-11 | 
| 2016-12-13 | 
| 2016-12-15 | 
| 2016-12-18 | 
| 2016-12-19 | 
| 2016-12-22 | 
| 2016-12-25 | 
| 2016-12-28 | 
| 2017-01-01 | 
| 2017-01-04 | 
| 2017-01-07 | 
| 2017-01-11 | 
| 2017-01-14 | 
| 2017-01-15 | 
| 2017-01-16 | 
| 2017-01-19 | 
+------------+ 

SELECT * 
    FROM my_table 
WHERE dt BETWEEN DATE_FORMAT(CURDATE()-INTERVAL 1 MONTH,'%Y-%m-01') 
       AND LAST_DAY(CURDATE()-INTERVAL 1 MONTH); 
+------------+ 
| dt   | 
+------------+ 
| 2016-12-01 | 
| 2016-12-03 | 
| 2016-12-04 | 
| 2016-12-07 | 
| 2016-12-11 | 
| 2016-12-13 | 
| 2016-12-15 | 
| 2016-12-18 | 
| 2016-12-19 | 
| 2016-12-22 | 
| 2016-12-25 | 
| 2016-12-28 | 
+------------+