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 提出的要求是同时在两个地方(这不可能发生),但我想要的是同时存在于这两个空间约束中的记录 - 我想要它们同时存在的记录,而不是要求同时在两者中的记录。

4

2 回答 2

2

我认为你需要自己加入——你当前的查询永远不会产生任何结果。

尝试这样的方法来获取在您的 WHERE Critera 中多次出现的标签 - 但是,您是否缺少第二个位置的某些标准?这个例子使用你上面的例子:

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

您可以使用聚合(几种方法之一):

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 回答