Mysql - 最近 30 天但 1 个月和 2 个月前的记录
Mysql - records from last 30 days, but 1 and 2 months ago
此查询选择最近 30 天应用的行:
SELECT `amount` FROM `mg_inputs` WHERE `amount`<0 AND `product`='144' AND DATE(firstedit) BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
查询选择最近 30 天但 1 个月前(介于:今天 30 天和今天 60 天之间)应用的行如何?同样的问题也适用于“2 个月前”。什么都不适合我(SQL 正在返回错误)。
这里需要注意的一件重要事情是并非所有月份都是 30 天,因此不要使用 INTERVAL DAY
,而是使用 INTERVAL MONTH
.
接下来,您不需要为日期使用减号,您可以使用 DATE_SUB()
函数来完成您需要的操作。
最后,记住这些事情,您可以使用 BETWEEN
运算符来检查日期范围内的行。因此,例如,如果您想要一个月前的所有行,请尝试以下操作:
SELECT *
FROM myTable
WHERE dateColumn BETWEEN DATE_SUB(CURDATE(), INTERVAL 2 MONTH) AND DATE_SUB(CURDATE(), INTERVAL 1 MONTH);
您应该注意,要使 BETWEEN
运算符正常工作,较旧的日期必须首先出现。这是一个 SQL Fiddle 示例来证明这一点。
此查询选择最近 30 天应用的行:
SELECT `amount` FROM `mg_inputs` WHERE `amount`<0 AND `product`='144' AND DATE(firstedit) BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
查询选择最近 30 天但 1 个月前(介于:今天 30 天和今天 60 天之间)应用的行如何?同样的问题也适用于“2 个月前”。什么都不适合我(SQL 正在返回错误)。
这里需要注意的一件重要事情是并非所有月份都是 30 天,因此不要使用 INTERVAL DAY
,而是使用 INTERVAL MONTH
.
接下来,您不需要为日期使用减号,您可以使用 DATE_SUB()
函数来完成您需要的操作。
最后,记住这些事情,您可以使用 BETWEEN
运算符来检查日期范围内的行。因此,例如,如果您想要一个月前的所有行,请尝试以下操作:
SELECT *
FROM myTable
WHERE dateColumn BETWEEN DATE_SUB(CURDATE(), INTERVAL 2 MONTH) AND DATE_SUB(CURDATE(), INTERVAL 1 MONTH);
您应该注意,要使 BETWEEN
运算符正常工作,较旧的日期必须首先出现。这是一个 SQL Fiddle 示例来证明这一点。