我有 2 个表格,一个包含旅行的开始和结束位置,另一个包含该旅行期间每分钟车辆的纬度/经度位置。这些表通过tripID 关联。
像这样的东西:
trip_table:
TRIPID | DEP | ARR
------------------
1 | CLE | CHI
2 | CLE | ATL
3 | ATL | CLE
position_table:
TRIPID | TIME | LAT | LON
-----------------------------------------
2 | May-20-2012T00:23 | 35.4 | -84.2
2 | May-20-2012T00:24 | 35.5 | -84.1
3 | May-21-2012T11:14 | 42.0 | -112.4
我有一个由 2 个条件组成的查询: 1. 提取行程出发/到达特定位置的所有位置数据 2. 提取行程经过特定纬度/经度的所有位置数据:
SELECT p.* FROM position AS p
JOIN trip_table t ON (t.tripid = p.tripid)
WHERE (t.dep = 'CLE' OR t.arr = 'CLE)
OR (p.lat > 34 AND p.lat < 40 AND p.lon > -100 AND p.lon < -90)
我的问题是:是否可以修改此查询以确定结果的哪些行来自第一个条件(即行程离开/到达指定位置)以及哪些来自第二个条件(即行程通过指定的纬度/隆)?
目前我唯一的想法是运行 2 个单独的查询,但如果可以减少查询的总数,我想避免这种情况。
如果有针对此类问题的标准 SQL 解决方案,那就太好了;如果没有,那么如果有一个特定于 PostgreSQL 的解决方案也可以。
编辑:如果有人想知道我为什么要这样做 - 结果位置被绘制在地图上,我想根据它们是来自有界区域还是来自两个到达/离开位置之间对它们进行颜色编码。