我有两个包含 datetime 和 double 的表。
看起来像这样:
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 作为参考)对每个表中的值执行查询。但是,在某些情况下,测量值没有对称日期。上面是这样一个时期的一个例子(这是最坏的情况),这里表二中的值对应于两秒后表一中的值。
为了根据时间对两个表的值进行排序,我想允许“排序精度”,设置为一个“事件”的测量值之间的最大时间差。在这种情况下,该精度为 2 秒。
我不希望它看起来如何:如果 ONE.data 和 TWO.date 之间的时间差小于 +- 2 秒;将二合一的值加入:
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
是否可以在 join 语句中有一个 IF 语句,这样如果
if SELECT TIMESTAMPDIFF(SECOND,'2002-03-18 10:30:02','2002-03-18 10:30:00') <= 2, then join