CREATE TABLE public.userlocation
(
datetime timestamp with time zone,
location geometry,
locationtype integer,
buffer double precision,
timebuffer double precision,
"userID" numeric,
"ID" integer NOT NULL DEFAULT nextval('"userlocation_ID_seq"'::regclass),
"time" time with time zone
)
每一行都有一個時間,然後一個值,以動態時間範圍的表,其實如果time=8
和timebuffer=15
左右的時間範圍將是endTime= 8+15min
和startTime= 8-15 min
。我可以做到這一點簡單地使用此查詢
select f1.*,f1.time +(f1.timebuffer::text||' minute')::INTERVAL as startTime,f1.time-(f1.timebuffer::text||' minute')::INTERVAL as endTime
一切工作正常,這個階段後,我要查詢行,他們的時間是開始時間和結束時間之間在另一方面,他們OV字erlap。我已經發現了這個問題
PostgreSQL query to detect overlapping time ranges
但這裏有一個區別,我沒有開始時間和結束時間,所以我必須用上面的方法來創建它們。所以兔子是我的查詢
select f1.*,f1.time -(f1.timebuffer::text||' minute')::INTERVAL as startTime,f1.time+(f1.timebuffer::text||' minute')::INTERVAL as endTime
from userlocation f1
where exists (select f2.time -(f2.timebuffer::text||' minute')::INTERVAL as startTime,f2.time+(f2.timebuffer::text||' minute')::INTERVAL as endTime
from userlocation f2
where tsrange(f2.startTime, f2.endTime, '()') && tsrange(f1.startTime, f1.endTime, '()')
and f2.locationtype = f1.locationtype
and f2.locationtype=1
and f2."ID" <> f1."ID");
但我得到這個錯誤
[2016-08-27 23:42:45] [42703] ERROR: column f2.starttime does not exist
的位置:372
我想首先我應該創建F2表,但我不知道如何,能否請您給我有些提示?
別名'爲startTime'在內部查詢中不可見。將它推入子查詢並加入。 (或使用CTE)(臨時視圖也可以工作) – wildplasser
爲什麼查詢中的startTime> endTime?我的意思是你正在做的操作是添加/減少間隔。 –
@wildplasser對不起,但我無法弄清楚你的意思,你能給我舉個例子嗎?謝謝 –