2014-11-13 1 views
0

당 계산 요소는 I이의 PostgreSQL : 시간 및 위치

id elementid timestamp    providerid x y 
1  1   2014-10-01T00:00:00Z  12   12 18 
2  1   2014-10-01T00:10:00Z  12   14 18 
3  1   2014-10-01T00:15:00Z  12   16 20 
4  2   2014-10-01T00:50:00Z  12   12 18 
5  2   2014-10-01T01:10:00Z  12   14 18 
6  2   2014-10-01T01:15:00Z  12   16 20 
7  7   2014-10-01T00:00:00Z  14   12 18 
8  7   2014-10-01T00:10:00Z  14   14 18 
9  7   2014-10-01T00:15:00Z  14   16 20 

같은 구조 PostgreSQL의 테이블을 가지고 I는 시간 및 위치 당 동일한 providerid 속하는 다른 elementid의 수를 카운트 할. Ymax와는 2 개 요소 20있다 = 이 xMin = 12, 18 = Ymin를 정의 상자 XMAX = 16에

, 0시 사이 01:00providerid 12 (4 개의 첫 번째 레코드 : elementid = 1 및 elementid = 2 인 요소)에 속합니다. 따라서 providerid = 12에 대해 시간당 요소 수는 입니다.

보시다시피, 나는 움직이는 요소을 정말로 다루고 있습니다. 그래서, 그 시간 틀 (1 시간)에, 나는 3 개의 다른 위치에있는 원소 1과 한 위치에있는 원소 2를 얻습니다. 따라서 동일한 공급자 (providerid = 12)에 속하는 총 2 개의 요소

providerid    start_time    end_time num_elements 
     12 2014-10-01T00:00:00Z 2014-10-01T01:00:00Z    2 

을 그리고 각 공급자에 대해 동일한 를 원하는 :

그런 다음 내 결과 집합은 다음과 같이한다.

응답은 this one, this one 또는 this one과 비슷하지만 해결책을 찾지 못했을 것입니다. 어떤 도움이라도 대단히 감사합니다.

미리 감사드립니다.

답변

1

COUNT(DISTINCT ...)을 사용해 보셨습니까?

SELECT t1."providerid", 
     s.start_time, 
     s.end_time, 
     COUNT(DISTINCT "elementid") As num_elements 
FROM table1 t1 
JOIN start_end_time s 
ON t1."timestamp" BETWEEN s.start_time AND s.end_time 
GROUP BY 
     t1."providerid", 
     s.start_time, 
     s.end_time 

데모 : http://sqlfiddle.com/#!12/b55a8/2

+0

좋아! 그것은 예상대로 작동합니다. 많은 감사합니다! – jorgeas80