2014-03-07 4 views
0

이것은 매우 간단한 질문이며 대답이 분명해야한다고 생각하지만 해결책을 찾지 못하는 데 2 ​​시간이 걸렸습니다.SQL에서 그룹당 가장 작은 그룹화

PostgreSQL에 저장된 개별 데이터 플럭스를 변환하려고합니다. 그들은 원래 고주파 샘플로 저장됩니다. 따라서 단일 타임 스탬프의 경우 비슷한 값을 여러 개 가질 수 있습니다. 가변 길이 샘플링을 만들고 싶었 기 때문에 유사한 값은 시퀀스에 한 번만 저장됩니다. 그저 단순한 카운트 (*) 그룹처럼 들리지만 시퀀스의 가장 낮은 타임 스탬프를 유지하고자하므로 그렇게 처리 할 수 ​​없습니다.

t1 2  
t2 2  t1 2 3 
t3 2 -> t4 3 1 
t4 3  t5 2 1 
t5 2 

가능한 한 빨리 요청하고 싶습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

[? 그룹에 의해 각 그룹의 첫 번째 행을 선택]의 중복 가능성 (http://stackoverflow.com/questions/3800551/select-first-row : 지금은 어떻게 최적화 된 요청을하려면 도움이 필요합니다 -in-each-group-by-group) –

+0

아니요, 값을 두 번 이상 방문 할 수 있으므로 각 방문 (t1 및 t5와 같은)에 대해 별도의 타임 스탬프가 필요합니다.이 문제는 실제로 SQL 쿼리 –

+0

이것은 갭 - 아일랜드 문제입니다. [이 태그의 질문] (http://stackoverflow.com/questions/tagged/gaps-and-islands)을 참조하십시오. –

답변

0

문제의 절반을 처리 할 수있는 방법을 찾았습니다.

  1. 델타 테이블 dn = tn-tn-1을 계산합니다. 어느
  2. 읽기 성능을 향상시킬 것이다,하지만,

내가 궁극적 열을 놓칠 델타 테이블에없는 0 1 테이블에서 모든 시간을 가지고 사소한하지만 행할 수 없습니다.

t1 2  t1 2 3 
t4 3 -> t4 3 1 
t5 2  t5 2 1 
+0

'dn = tn-tn-1'은'lag()'함수를 사용하여 쉽게 할 수 있습니다. –

+0

당신은 자신의 작품을 보여줘야하기 때문에 미래의 독자들에게 도움이 될 것입니다. 또한이 질문은 답변이 아닌 실제로 편집해야합니다. (자신의 질문에 답하는 것이 좋지만, 진행중이 아닌 최종 해결책으로 만들어주십시오) –