2017-07-04 114 views
0

获取行我想这个查询从上月

SELECT * 
FROM flexible_products 
WHERE YEAR(updated_at) = YEAR(DATE_SUB(CURDATE(), INTERVAL -1 MONTH)) 
AND MONTH(updated_at) = MONTH(DATE_SUB(CURDATE(), INTERVAL -1 MONTH)) 

对我目前的工作。我想要做的是获得前一个月的所有行,例如

例如,我们今天有2017年7月4日,我想从1月到6月获得行,这不是上述结果查询。

这是在MySQL中的最佳方式是什么?

+0

记录应该始终在1月和当前1个月之间? –

+0

update_at是列名? – Ravindra

+0

我应该满足前一个月的想法 – Fil

回答

2

以下查询将返回当年1月1日当天或之后更新的所有记录,但在当前月份的第一个月之前定格。

SELECT * 
FROM flexible_products 
WHERE updated_at >= DATE_FORMAT(NOW(), '%Y') AND 
     updated_at < DATE_FORMAT(NOW() ,'%Y-%m-01') 

按照下面的运行演示的链接:

Rextester

-1

如果我理解正确的话,你可以做到这一点

WHERE updated_at <= '2017-07-01' AND updated_at >= '2017-01-01' 
+0

我没有降低您的评分,因为您的查询在此时刻是正确的。但是,8月1日即将问世,你的查询将会失败。 –

+0

是的,我知道我刚给他的结构。太糟糕了别人downvote我.. – Rad

0

你也应该试试这个,或者你可以得到任何两个日期之间的数据。

SELECT * FROM flexible_products WHERE的updated_at BETWEEN DATE_ADD(DATE_FORMAT(NOW(), '%Y-%M-01'),INTERVAL -3月),NOW()

日期输出是: -
DATE_ADD(DATE_FORMAT(NOW(),'%​​Y-%m-01'),INTERVAL -3 MONTH)// 2017-04-01
NOW()// 2017-07-04 11:17:38

0

有点短。不知道是否也更快

SELECT * 
FROM flexible_products 
WHERE 
    YEAR(updated_at) = YEAR(CURRENT_DATE) AND 
    MONTH(updated_at) < MONTH(CURRENT_DATE())