我有一个ROAD
表,每行的每个顶点都有一行:
+---------+--------------+-------------+
| ROAD_ID | VERTEX_INDEX | MEASURE_VAL |
+---------+--------------+-------------+
| 1 | 1 | 0 |
| 1 | 2 | 1.2 |
| 1 | 3 | 2.8 |
| 1 | 4 | 4.0 |
| 1 | 5 | 4.3 |
| 1 | 6 | 6.7 |
| 1 | 7 | 7.1 |
+---------+--------------+-------------+
| 2 | 1 | 0 |
| 2 | 2 | 5.2 |
| 2 | 3 | 7.7 |
| 2 | 4 | 9.6 |
| 2 | 5 | 11.8 |
+---------+--------------+-------------+
| 3 | 1 | 0 |
| 3 | 2 | 2.4 |
| 3 | 3 | 4.9 |
+---------+--------------+-------------+
Run Code Online (Sandbox Code Playgroud)
以及包含EVENT
与道路部分相关的行的表格:
+----------+---------+--------------+------------+
| EVENT_ID | ROAD_ID | FROM_MEASURE | TO_MEASURE |
+----------+---------+--------------+------------+
| 01 | 1 | 2.8 | 5.9 |
| 02 | 2 | 3.0 | 5.6 |
| 03 | 3 | 0 | 2.6 |
+----------+---------+--------------+------------+
Run Code Online (Sandbox Code Playgroud)
我想选择的顶点ROAD
,其中MEASURE_VAL
包括/包含EVENT
表的FROM_MEASURE
和TO_MEASURE
(包括之间的顶点):
+---------+--------------+-------------+
| ROAD_ID | VERTEX_INDEX | MEASURE_VAL |
+---------+--------------+-------------+
| 1 | 3 | 2.8 |
| 1 | 4 | 4.0 |
| 1 | 5 | 4.3 |
| 1 | 6 | 6.7 |
+---------+--------------+-------------+
| 2 | 1 | 0 |
| 2 | 2 | 5.2 |
| 2 | 3 | 7.7 |
+---------+--------------+-------------+
| 3 | 1 | 0 |
| 3 | 2 | 2.4 |
| 3 | 3 | 4.9 |
+---------+--------------+-------------+
Run Code Online (Sandbox Code Playgroud)
换句话说,我想从事件和之间的ROADS
位置选择顶点,如果不完全等于或,则还包括前面和/或后面的顶点(如果适用)。MEASURE_VAL
FROM_MEASURE
TO_MEASURE
MEASURE_VAL
FROM_MEASURE
TO_MEASURE
再说一遍,我想选择包含事件的行部分。
我怎样才能做到这一点?
您可以简单地使用LAG
and获取上一个和下一个度量值LEAD
,并根据它们进行过滤:
select road_id, vertex_index, measure_val from (
select
r.road_id, r.vertex_index, r.measure_val, e.from_measure, e.to_measure,
lag(r.measure_val, 1, r.measure_val) over
(partition by e.road_id order by r.vertex_index) as prev_measure_val,
lead(r.measure_val, 1, r.measure_val) over
(partition by e.road_id order by r.vertex_index) as next_measure_val
from
road r join event e on (r.road_id = e.road_id)
) where prev_measure_val <= to_measure and next_measure_val >= from_measure;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
111 次 |
最近记录: |