首页 > 解决方案 > 我如何选择上个月的时间间隔?,它也必须在上个月最后一天的下午 1 点到实际当天的中午之间

问题描述

我已经尝试解决这个问题几个小时了,到目前为止我所达到的是这样的:

SELECT * FROM mytable WHERE DATE(datetime_column) 
  BETWEEN DATE_SUB(DATE_FORMAT(NOW(),'%Y-%M-01'),INTERVAL 1 DAY) AND NOW()
    AND HOUR(datetime_column) > = '13'
     ORDER BY
         datetime_column

除了天间隔,我还需要从上个月的最后一天到当前日期的中午 ​​13 点之间的小时间隔。

小提琴似乎不适用于当前查询,但它在我的数据库中工作,但请查看小提琴以获取更多信息:

https://www.db-fiddle.com/f/a3jui7aPMevU81Cka4BqXg/0

和样本数据:


CREATE TABLE mytable  (
  id INT,
  datetime_column DATETIME
);
INSERT INTO mytable (id,datetime_column) VALUES 
(1,'2020-03-31 08:00:00'),
(2,'2020-03-31 13:00:00'),
(3,'2020-04-02 14:30:00'),
(4,'2020-04-06 18:00:00'),
(5,'2020-04-21 05:00:00'),
(6,'2020-04-23 13:00:00'),
(7,'2020-04-23 14:00:00');

如果需要更多信息,请告诉我。

标签: mysql

解决方案


我想这就是你想要的

SELECT * FROM mytable
WHERE (
          DATE(datetime_column) > LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
      AND datetime_column < (CURDATE() + INTERVAL 12 HOUR)
      )
OR (
         DATE(datetime_column) = LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
    AND  HOUR(datetime_column) >= 13
);

+------+---------------------+
| id   | datetime_column     |
+------+---------------------+
|    2 | 2020-03-31 13:00:00 |
|    3 | 2020-04-02 14:30:00 |
|    4 | 2020-04-06 18:00:00 |
|    5 | 2020-04-21 05:00:00 |
+------+---------------------+

2 行(0.00 秒)

这里LAST_DAY(CURDATE() - INTERVAL 1 MONTH)给出了上个月的最后一天。

datetime_column < (CURDATE() + INTERVAL 12 HOUR)测试该时间是否在今天中午之前。


推荐阅读