mysql - 查找最接近指定日期时间的记录

标签 mysql sql date select greatest-n-per-group

我正在尝试从最接近指定日期和时间的表中检索数据,例如,您可以在下面看到一些关于门的数据,以及它们是否在特定时间打开和关闭。我要检索更接近特定时间的按 DoorTitle 分组的门列表。示例数据如下

Id    DoorTitle    Status    DateTime
1     Door_1       OPEN      2019-04-04 9:16:22
2     Door_2       CLOSED    2019-04-01 15:46:54
3     Door_3       CLOSED    2019-04-04 12:23:42
4     Door_2       OPEN      2019-04-02 23:37:02
5     Door_1       CLOSED    2019-04-04 19:56:31

假设我想知道门的状态,如果它们在 2019-04-04 23:54:55 打开或关闭,给我按最接近的门标题分组的记录时间。我已经尝试过这个查询,但它确实给了我最接近这个时间的记录,它只是通过检查 DateTime 是否小于 2019-04-04 23:54:55.

SELECT DoorTitle,Status,DateTime 
FROM Doors 
WHERE DateTime <= '2019-04-04 23:54:55'  
GROUP BY DoorTitle;

运行查询后我想要的结果是按最接近日期和时间的 DoorTitle 分组的门列表,即 2019-04-04 23:54:55 指定如下所示它应该返回这些结果,但我正在使用的查询没有返回这个结果。

DoorTitle    Status    DateTime
Door_3       CLOSED    2019-04-04 12:23:42
Door_2       OPEN      2019-04-02 23:37:02
Door_1       CLOSED    2019-04-04 19:56:31

让我知道我可以使用什么 sql 查询来实现此目的以及我的查询是如何出错的。提前致谢。

最佳答案

不要使用聚合。使用过滤:

SELECT d.*
FROM Doors d
WHERE d.DateTime = (SELECT MAX(d2.DateTime)
                    FROM doors d2
                    WHERE d2.DoorTitle = d.DoorTitle AND
                          d2.DateTime <= '2019-04-04 23:54:55'
                   );

对于 doors(DoorTitle, DateTime) 上的索引,性能应该是合理的。

关于mysql - 查找最接近指定日期时间的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55519124/

相关文章:

mysql - SQL - 对于另一列中的每个值,从一列返回所有唯一的值对

mysql - 需要对我的 SQL 查询进行一些修改

r - 如何将函数应用于 R 中 tibbles 列表的每一行?

python - 添加具有默认值的缺失日期索引

java - 将静态ArrayList中的数据插入到mySql数据库中的表中

php - 插件设置 WordPress 3.8.1 在 Google App-engine SDK 上运行

当查询太多行时,MySQL 查询返回奇怪的格式错误的结果

php - 限制从 SQL 表检索的图像的大小

mysql - 为一行值显示多个列值

Javascript getUTCDate 返回前一天