2011-03-16 3 views
1

내 시계열 데이터에서 다음 쿼리와 같은 쿼리를 쉽게 실행할 수있는 방법을 원합니다.시계열 데이터에서 "5 일 이내"와 같은 쿼리를 어떻게 실행합니까?

"서로의 7 일 이내에 이루어지는 가장 일반적인 이벤트는 무엇입니까?"

SQL과 Java 프로그램을 사용하여 각 행을보고 7 일 또는이 후에 모든 이벤트를 조회하는 쿼리를 실행하여이 작업을 수행 할 수 있지만 매우 우아하지 않고 성능은 끔찍할 것입니다. SQL이나 다른 쿼리 언어를 사용하여 우아하게이 작업을 수행 할 수있는 또 다른 방법이 있습니까?

단순화 된 테이블 구조는 다음과 같다 : 나는 일반적인 솔루션을 찾고 있어요으로

thetime datetime 
eventid int 
magnitude double 
intensity double 

내가 특별히 데이터에 대해 무엇인지 설명하고 싶지 않아요.

+0

관련 테이블 구조를 제공 할 수 있습니까? ? –

+0

이것은 통계 문제처럼 들립니다. 통계 솔루션 (아마도 클러스터 분석)을 고려해보십시오. – dnagirl

+0

왜 GIS 태그입니까? –

답변

2

자기 조인을 사용하면 다음과 같이 할 수 있습니다. 이것은 SQL 서버에 대한 유효한 구문이지만 테이블 구조 나 사용중인 RDBMS를 모르는 경우 설정을 사용자 정의하기가 어렵습니다. ...

SELECT TOP 10 
     a.Event as 'First Event', 
     b.event as 'Second Event', 
     ABS(CAST((a.timefield - b.timefield) as INT)) as 'Time Apart' 
FROM MYtable a 
INNER JOIN Mytable B 
    ON a.IDField <> b.IDField 
WHERE (ABS(CAST((a.timefield - b.timefield) as INT)) <= 5 
+0

이것의 ABS 부분은 A, B 및 B, A가 모두 나타남을 의미합니다. 중복을 피하기 위해 "향후 5 일 내에"이벤트를 찾는 것이 더 낫습니다. – MatBailie

+0

@Dems - 이것은 A, B 및 B, A가 같은 테이블이기 때문에 ... 같은 테이블의 어느 버전이 먼저 나와야하는지 어떻게 알 수 있습니까? – JNK

+0

내가 다시 한번 말하자면 A와 B는 테이블에 개별 레코드로 의미했습니다 ... 1 번 이벤트는 1 번, 4 번 이벤트는 2 번 데이터로 간주하십시오. 코드는 한 레코드에서 (1, 4), 다른 레코드에서 (4, 1)을 반환합니다. 동일한 단일 조합의 두 순열. ABS를 제거하면 해당 순열 중 하나가 제거됩니다. – MatBailie

관련 문제