1

datetime と double を含む 2 つのテーブルがあります。

次のようになります。

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 の値は 2 秒後のテーブル 1 の値に対応します。

時間に従って2つのテーブルの値をソートするために、1つの「イベント」の測定値間の最大時間差に設定された「ソート精度」を許可したいと考えています。この場合、この精度は 2 秒です。

どのように見せたくないか: ONE.data と TWO.date の時間差が +- 2 秒未満の場合。TWO の値を ONE に結合します。

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 
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 に答える