MySQL日期时间字段的最接近匹配

问题描述

| 我已经从数据库中的两个传感器获得了原始数据。为了从这些传感器计算出有意义的结果,我每个传感器都需要一个数据点。要注意的是,它们的时间戳不能保证完全匹配。我可以请求MySQL从一个传感器获取时间戳,并找到与另一个传感器最接近的时间戳,但是此请求需要针对每一行运行,然后每当添加新行时再次运行,我担心,只要插入一个数据点,就在表中进行搜索可能会成为性能负担,特别是如果添加了更多此类传感器。至少对于天真的算法而言,找到最接近的时间戳似乎是线性时间操作。这会导致性能问题,还是MySQL在这方面进行了优化?     

解决方法

您可以使用简单的查询来获取最接近给定值的结果:
SELECT `timestampcolumn`
FROM `thetable`
ORDER BY ABS(`timestampcolumn` - givenvalue)
LIMIT 1
如果您在右边的列上使用索引,则应该可以解决问题,并且不是非常耗费性能。 MySQL是用于这样的查询的。     ,您可以使用MySQL函数制作遮罩来转换日语日期中的时间戳,例如20130109(yyyymmddhhmmsszzz),也可以使用PHP,java等通过代码进行转换; 在尝试使用SELECT查找行时,您可以执行以下操作:
SELECT * FROM TABLE WHERE ADATE BETWEEN(LEFT(BEGINDATE,8),LEFT(ENDDATE,8));
要么
SELECT * FROM TABLE WHERE ADATA < LEFT(MYDATE,8) LIMIT 1;
要么 在需要的地方使用野蛮的\“ _ \”,例如您希望更改日期的月份。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...