4

フィールド内のアイテムのXYZ位置をSQLデータベースに報告するシステムがあります。アイテムがポイントを通過する既知の時点と、ポイントを通過した後のアイテムの位置をフィルタリングすることにより、誤検知(移動するアイテムのみを識別する)をフィルタリングしようとしています。

私の論理は、アイテムがある場所と時間にあり、別の場所と時間にある場合、それは移動したに違いないということです。

だから私はこのクエリを持っています:

SELECT tag_ID, X_location*3.28, Y_location*3.28, locate_time
FROM tag_blink_history
WHERE 
     (LOCATE_TIME > '2013-01-29 11:05:51' 
     AND LOCATE_TIME < '2013-01-29 11:06:56' 
     AND ((y_location*3.28 > 61) 
     AND (y_location*3.28 < 67.5)) 
     AND ((x_location*3.28 > 14.5) 
     AND (x_location*3.28 < 17.5)))
     AND (((y_location*3.28 > 70) 
     AND (y_location*3.28 < 75)) 
     AND locate_time < '2013-01-29 11:06:50' )
ORDER BY tag_id DESC

何か案は?上記のクエリでSQLに要求しているのは、一度に2つの場所にあるもの(これは発生しません)ですが、必要なのは、これらの両方の空間制約に存在するレコードです。同時に両方にあるレコードを要求します。

4

2 に答える 2

2

私はあなたがそれ自体で参加する必要があると思います-あなたの現在のクエリは決して結果を生み出しません。

このようなことを試して、WHERE Criteraで複数回出現するタグを取得します。ただし、2番目の場所でいくつかの基準が欠落していますか?この例では、上記の例を使用しています。

SELECT DISTINCT t.tag_ID
FROM tag_blink_history t
   JOIN tag_blink_history t2 ON t.tag_ID = t2.tag_ID AND (t.x_location <> t2.x_location OR t.y_location <> t2.y_location)
WHERE (t.LOCATE_TIME > '2013-01-29 11:05:51' 
      AND t.LOCATE_TIME < '2013-01-29 11:06:56' 
      AND ((t.y_location*3.28 > 61) AND (t.y_location*3.28 < 67.5)) 
      AND ((t.x_location*3.28 > 14.5) AND (t.x_location*3.28 < 17.5)))
      AND (((t2.y_location*3.28 > 70) AND (t2.y_location*3.28 < 75)) 
      AND t2.locate_time < '2013-01-29 11:06:50' )
ORDER BY t.tag_id DESC

幸運を。

于 2013-01-29T17:46:25.177 に答える
1

集計を使用できます(いくつかのアプローチの1つ)。

SELECT tag_ID, min(X_location*3.28), max(X_location*3.28), min(Y_location*3.28), max(Y_location*3.28), min(locate_time), max(locate_time)
FROM tag_blink_history
WHERE 
     (LOCATE_TIME > '2013-01-29 11:05:51' 
     AND LOCATE_TIME < '2013-01-29 11:06:56' 
     AND ((y_location*3.28 > 61) 
     AND (y_location*3.28 < 67.5)) 
     AND ((x_location*3.28 > 14.5) 
     AND (x_location*3.28 < 17.5)))
     AND (((y_location*3.28 > 70) 
     AND (y_location*3.28 < 75)) 
     AND locate_time < '2013-01-29 11:06:50' )
GROUP BY
   tag_ID
HAVING
   (min(X_location) <> max(X_location))
   OR
   (min(Y_location) <> max(Y_location))
ORDER BY tag_id DESC

上記の@sgeddes自己参加アプローチも優れています。派生テーブルを調べることもできます。

于 2013-01-29T18:41:01.337 に答える