我正在尝试从最接近指定日期和时间的表中检索数据,例如,您可以在下面看到一些关于门的数据,以及它们是否在特定时间打开和关闭。我要检索更接近特定时间的按 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/