1

我有两个包含 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 
4

1 回答 1

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

在此处查看小提琴。

于 2013-03-21T11:49:39.330 回答