2014-01-30 3 views
1

나는 24 시간 동안 하루당 분당 약 75,000 명의 사람들의 위치가있는 큰 테이블을 가지고있다. 열은 다음과 같습니다마지막으로 알려진 위치의 업데이트?

PPID (사람 ID) point_time (타임 스탬프) the_geom (지오메트리 점)

내 문제는 위치 (the_geom) 열에서 정보의 일부 (많이)이없는 것입니다. 이 열은 마지막 사람의 알려진 위치로 업데이트해야합니다. 나는 이것을 어떻게하는지에 관해 개념적으로 고심하고있다. 내가 생각하는 테이블에 자기 조인의 일종. 그러나 업데이트에 대한 올바른 데이터를 얻는 방법은 무엇입니까? ,

http://sqlfiddle.com/#!15/77157/1

감사

제임스

답변

0

나는 이것이 더 큰 데이터 세트를 통해 수행하는 방법을 잘 모르겠어요 :

나는 문제를 보여주는 SQL 바이올린을 만들었어요 여기에 두 개의 중첩 된 하위 쿼리를 사용하는 단일 쿼리 솔루션이 있습니다.

SELECT 
    data.ppid, 
    data.point_time, 
    CASE 
    WHEN data.the_geom IS NULL 
    THEN (
     --Get all locations with an earlier time stamp for that ppid 
     SELECT geom.the_geom 
     FROM test_data geom 
     WHERE data.ppid = geom.ppid 
     AND geom.point_time < data.point_time 
     AND geom.the_geom IS NOT NULL 
     AND NOT EXISTS (
     -- Cull all but the most recent one 
     SELECT * 
     FROM test_data cull 
     WHERE cull.ppid = geom.ppid 
     AND geom.the_geom IS NOT NULL 
     AND cull.point_time < data.point_time 
     AND cull.point_time > geom.point_time 
     AND cull.the_geom IS NOT NULL 
     ) 
    ) 
    ELSE data.the_geom 
    end 
FROM test_data data 
+0

블레미. 잘 했어. 그것은 훌륭합니다. 정말 고마워. 지금 큰 데이터 세트로 실행하고 어떻게 진행되는지 살펴 보겠습니다. – TheRealJimShady

관련 문제