2013-03-21 97 views
1

我有两个包含datetime和double的表格。根据日期时间对表格中的数据进行排序datetime

,看起来像这样:

mysql> select * from ONE;   | mysql> select * from TWO; 
+---------------------+----------+ | +---------------------+----------+ 
| date    | value | | | date    | value | 
+---------------------+----------+ | +---------------------+----------+ 
| 2002-03-18 10:30:02 | -181.241 | | | 2002-03-18 10:30:00 | -188.192 | 
| 2002-03-18 10:30:06 | -180.673 | | | 2002-03-18 10:30:04 | -187.619 | 
| 2002-03-18 10:30:10 | -180.055 | | | 2002-03-18 10:30:08 | -187.032 | 
| 2002-03-18 10:30:14 | -179.459 | | | 2002-03-18 10:30:12 | -186.418 | 
| 2002-03-18 10:30:18 | -178.801 | | | 2002-03-18 10:30:16 | -185.807 | 

我想对从每一个共同的日期列的表值的查询(使用ONE.date作为参考)。但是,在某些情况下,测量值没有对称日期。以上是这种时间段的一个例子(这是最坏的情况),这里表TWO的值对应于两秒后表1中的值。

为了根据时间对两个表格的值进行排序,我希望允许“排序准确性”,它被设置为一个“事件”的测量之间的最大时间差。这种精度在这种情况下是2秒。

我该怎么看:如果ONE.data和TWO.date之间的时差小于+ - 2秒;加入来自TWO的值:

mysql> select * from ONE;   
+---------------------+----------+-----------+ 
| date    | valueONE | valueTWO | 
+---------------------+----------+ ----------+ 
| 2002-03-18 10:30:02 | -181.241 | -188.192 | 
| 2002-03-18 10:30:06 | -180.673 | -187.619 | 
| 2002-03-18 10:30:10 | -180.055 | -187.032 | 
| 2002-03-18 10:30:14 | -179.459 | -186.418 | 
| 2002-03-18 10:30:18 | -178.801 | -185.807 | 

如果差值大于+ - 2秒,则放弃测量。 这是我已经尝试过,但下面的查询只是超时。

SELECT ONE.date, ONE.value, TWO.date, TWO.value 
FROM ONE 
    join TWO on ONE.date = TWO.date+INTERVAL 1 SECOND or ONE.date = TWO.date 

是它有一个IF句子可能里面的连接语句等,如果

if SELECT TIMESTAMPDIFF(SECOND,'2002-03-18 10:30:02','2002-03-18 10:30:00') <= 2, then join 
+1

在您的示例中,TWO中的时间戳也对应于ONE中的时间戳,但是两秒后。看来你希望ONE中的时间系列带头组装结果集。那是对的吗?从两个行中选择行来匹配ONE行时,JOIN是否应该同时考虑未来和过去?另外,如果在ONE中单行的匹配范围内有两行中有多行,或者反过来,您希望发生什么? – 2013-03-21 11:57:28

+0

感谢您的关注。 fthiella的答案是我所需要的。 但是,你做出了卓越的观点。是的,我选择ONE作为参考(率先汇总结果),是的,我试图在选择行时使联合声明看起来向前和向后看。最后,好点。这可能是另一种情况下的问题,但是,在我的数据集中,时间戳不会超过3.95秒。谢谢 – Paulten 2013-03-21 12:14:26

回答

1

你可以使用BETWEEN:

SELECT ONE.date, ONE.value value_ONE, TWO.value value_TWO 
FROM 
    ONE join TWO 
    on ONE.date BETWEEN TWO.date AND TWO.date + INTERVAL 2 SECOND 
ORDER BY ONE.date 

请参阅小提琴here

+0

完美。非常感谢你,非常感谢。 – Paulten 2013-03-21 12:13:24

相关问题