plpgsql을 사용하여 루프에서 실행될 매개 변수 쿼리를 만들려고합니다.Pl/pgSQL을 사용하여 루프에서 쿼리에 매개 변수 전달
2 개의 매개 변수는 쿼리에 전달 된 시작 위도/경도 점입니다. 위도 및 경도 점은 배열에서 검색되므로 어레이의 반복과 같은 foreach가되며 모든 실행에 대해 두 개의 위도/경도 값을 쿼리에 전달합니다.
어떻게하면 좋을까요?
내 쿼리 및 구현 방식은 다음과 같음 : (X, Z 값은 전달 될 매개 변수 위도/경도 값이며 Y와 T는 처리 할 특정 계산을 수행하여 얻습니다.). 이 시간 간격에 해당 요청의 수 (타임 스탬프)를 계산하고 반환하기 때문에 명확하게하기 위해, 내 쿼리가 여러 행과 멀티 원주 결과 (타임 스탬프 및 계산)을 반환
for each latitude-longitude pair X,Z in array
find Y and T from X and Z
WITH cal AS (
SELECT generate_series('2011-02-02 00:00:00'::timestamp ,
'2012-04-01 05:00:00'::timestamp ,
'1 hour'::interval) AS stamp
),
qqq AS (
SELECT date_trunc('hour', calltime) AS stamp, count(*) AS zcount
FROM mytable
WHERE calltime >= '2011-02-13 22:55:11'
AND calltime <= '2012-02-13 01:02:21'
AND (calltime::time >= '22:55:11'
OR calltime::time <= '01:02:21')
AND lat >= X
AND lat <= Y
AND lon >= Z
AND lon <= T
GROUP BY date_trunc('hour', calltime)
)
SELECT cal.stamp, COALESCE (qqq.zcount, 0) AS zcount
FROM cal
LEFT JOIN qqq ON cal.stamp = qqq.stamp
WHERE cal.stamp >= '2011-02-13 22:00:00'
AND cal.stamp <= '2012-02-13 01:02:21'
AND (
extract ('hour' from cal.stamp) >= extract ('hour' from '2011-02-13 22:00:00'::timestamp) or
extract ('hour' from cal.stamp) <= extract ('hour' from '2012-02-13 01:02:21'::timestamp)
)
ORDER BY stamp ASC;
약 1 백만개의 위도/경도 값을 전달해야하므로 두 번째 테스트를 진행할 것입니다. 결과는 C++에서 처리되므로 속도가 중요합니다. 팁을 가져 주셔서 감사합니다. – sm90901
@ sm90901 Yikes, 그럼 배열을 원하지 않을거야! 참조 자나 임시 테이블은 이와 같은 양의 데이터를 처리하는 방법입니다. –
다시 살펴 보겠습니다. – sm90901