在最近1小时之间选择mysql

时间:2019-05-17 11:12:44

标签: mysql

我想知道是否有人可以帮助我。我试图从表中选择过去一个小时内的记录。但是出于某种原因,它会不断返回所有记录。

finished
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 13:00:00
2019-05-17 13:00:00
2019-05-17 13:00:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00

这是我的查询:

SELECT *
FROM people
WHERE finished > DATE_SUB(NOW(), INTERVAL 1 HOUR)

我在下午12点运行查询,当时只希望在晚上11点至12点之间记录。而且,如果以后再运行-假设下午3点,我希望记录在2-3pm之间。 我做错了什么吗?请帮忙。

4 个答案:

答案 0 :(得分:1)

如果表中可能会有将来的事件,则还必须指定上限。

SELECT *
       FROM people
       WHERE finished >= date_sub(now(), INTERVAL 1 HOUR)
             AND finished < now();

答案 1 :(得分:0)

您正在做的是,您在12说的是向我显示所有时间戳大于11的数据

DATE_SUB(NOW(), INTERVAL 1 HOUR)

将导致

2019-05-17 11:00:00

2019-05-17 12:00:00

因此您的查询看起来像

SELECT *
FROM people
WHERE finished > 2019-05-17 11:00:00

因此您的时间戳为2019-05-17 12:55:00的记录将满足上述条件并显示在结果中。

为了达到您想要的目标,您必须在查询中添加上限

SELECT *
FROM people
WHERE finished > DATE_SUB(NOW(), INTERVAL 1 HOUR) and finished <= NOW();

答案 2 :(得分:0)

使用BETWEEN是另一种选择。确保运行SELECT NOW()以确保您不需要修正时区或其他任何东西。

SELECT * FROM people
WHERE finished BETWEEN DATE_SUB(NOW(), INTERVAL 3600 SECOND) AND NOW();

答案 3 :(得分:-2)

SELECT *
FROM people
WHERE finished > NOW() - INTERVAL 1 HOUR;

NOW()-间隔1小时”将返回从现在开始1小时的时间戳。 因此,“ 完成> NOW()-间隔1小时”将比较数据库中的时间戳和从现在开始1小时之前的时间。