在MySQL中识别新月份的第一分钟

在MySQL中识别新月份的第一分钟,mysql,Mysql,我有一个这样的查询,它正确地提取了上个月的数据 SELECT t.* FROM table t WHERE CONCAT(MONTHNAME(t.create_date),' ', YEAR(t.create_date)) = CONCAT(MONTHNAME(CURRENT_DATE - INTERVAL 1 MONTH),' ', YEAR(CURRENT_DATE - INTERVAL 1 MONTH)) 我现在想扩展它,以便它还包括在新的/当前月份的前2分钟内发生的任何事情。所以我试

我有一个这样的查询,它正确地提取了上个月的数据

SELECT t.*
FROM table t 
WHERE CONCAT(MONTHNAME(t.create_date),' ', YEAR(t.create_date)) = CONCAT(MONTHNAME(CURRENT_DATE - INTERVAL 1 MONTH),' ', YEAR(CURRENT_DATE - INTERVAL 1 MONTH))
我现在想扩展它,以便它还包括在新的/当前月份的前2分钟内发生的任何事情。所以我试着做一些像

SELECT t.*
    FROM table t 
    WHERE (
CONCAT(MONTHNAME(t.create_date),' ', YEAR(t.create_date)) = CONCAT(MONTHNAME(CURRENT_DATE - INTERVAL 1 MONTH),' ', YEAR(CURRENT_DATE - INTERVAL 1 MONTH)) 
OR (t.create_date between STARTOFMONTH and (STARTOFMONTH + INTERVAL 2 MINUTE)
)

我读过很多类似的帖子,但找不到任何对一般的“月初+间隔”方法有效的东西,我也不能明确地说明所讨论的月份,因为它显然每个月都在变化。谢谢你的任何想法

你可以减去2分钟。我建议使用DATE_格式进行比较:

SELECT t.*
FROM table t 
WHERE DATE_FORMAT(t.create_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH, '%Y-%m') OR
      DATE_FORMAT(t.create_date - INTERVAL 2 MINUTE, '%Y-%m') = DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH, '%Y-%m);
您可以将其简化为:

WHERE DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH, '%Y-%m') IN
          (DATE_FORMAT(t.create_date, '%Y-%m'),
           DATE_FORMAT(t.create_date - INTERVAL 2 MINUTE, '%Y-%m')
          )

您应该提供表结构和一些示例数据。。和预期的结果。这是完美的-特别是像你添加的简化你教了我一些东西!谢谢3分钟后接受