2012-03-22 3 views
1

다른 데이터 소스에서 사전 추출 된 데이터 세트에서 작업을 위임 받았으며 현재이 데이터를 쿼리 할 수있는 액세스 권한 만 있습니다 (기본 데이터 분석을위한 Excel 현재 행 제한보다 큼). 기본적으로, 나는 세 가지 관련 필드가 있습니다타임 스탬프 추출을위한 SQL 쿼리

FK_ID = 트랜잭션의 상태와 관련된 거래

CD = 코드와 관련된 임의의 수 =의 타임 스탬프를

TIMESTAMP를 (단지 BEGIN과 END는 값입니다 가정) 거래

이제

이 데이터 세트의 간단한 예 :

FK_ID   CD     TIMESTAMP 
000012   END    2012-01-02-14.27.59.133612 
000012   BEGIN    2012-01-02-14.27.57.176631 
000015   END    2011-12-12-14.27.59.133612 
000015   BEGIN    2011-12-11-14.27.59.133612 
000019   END    2011-11-10-14.27.59.133612 
000019   BEGIN    2011-11-09-14.27.59.133612 
000019   END    2011-11-08-14.27.59.133612 
000019   BEGIN    2011-11-07-14.27.59.133612 

당신이 볼 수 있듯이, 그것은 버전이 아니다 y를 복잡하게하는 문제는 각 고유 FK_ID에 대한 BEGIN과 END 코드 사이의 타임 스탬프 차이를 계산 한 다음 그 차이를 집계하는 열을 생성해야하며 일부 FK_ID에 여러 타임 스탬프가 포함되어 있다는 사실도 고려해야합니다. BEGIN/END 쌍은 그들.

이제 쌍 이상의 것이있는 경우를 무시할 수있는 권한이 부여되었습니다. 무시하면 초기 쌍 수만 계산됩니다. 그러나 바람직하지 않습니다.

시간이 대략 목표 내에 있는지를 결정하는 총 평균 시간을 결정하기 위해 이러한 차이점을 알아야합니다.

각 FK_ID 쌍 또는 제안 할 다른 자동화 된 방법에 대해이 시간 소인의 차이점을 알아내는 가장 좋은 쿼리는 무엇입니까?

SQL을 이해하고 C#으로 충분히 익숙하지만 시간 프레임 및 기타 요소가 논리적으로이 문제를 해결할 수있는 능력을 망가 뜨리고 있습니다. 테이블 이름을 가정

+2

어떤 RDBMS를 사용하고 있습니까? –

+0

이게 무슨 뜻인지 모르겠다. Access로 가져와야하는 스프레드 쉬트에만 접근 할 수 있었다. 소스 데이터베이스에 액세스 할 수 없으며 인프라로 인해 액세스가 불가능하고 메인 프레임 작업 이외의 다른 방법으로 쿼리를 실행할 수 없습니다. –

+0

동일한 fk_id의 타임 스탬프에 겹침이 없도록 할 수 있습니까? 즉, 모든 START 뒤에 STOP이오고 다른 START는 시작되지 않습니다. –

답변

2

나는 같은 것을 할 것 Access에서, TABLE1입니다 : 기본적으로 얻을

SELECT Table1.FK_ID, DateDiff("s",[TABLE1].[TIMESTAMP],[END_QUERY].[TIMESTAMP]) AS DifferenceInSeconds 
FROM Table1 

INNER JOIN 

(SELECT Table1.FK_ID, Table1.CD, Table1.TIMESTAMP 
FROM Table1 
WHERE (((Table1.CD)="END")) 
ORDER BY Table1.FK_ID, Table1.CD) AS END_QUERY 


ON Table1.FK_ID = END_QUERY.FK_ID 
WHERE (((Table1.CD)="BEGIN")) 
ORDER BY Table1.FK_ID, Table1.CD; 

을 모든 시작이 개 하위 쿼리에 END 초에 (쿼리의 차이를 얻을 - 당신을 이 부분을 언급하지 않았다). 하나의 문제는 하나의 거래에서 여러 항목이있는 것입니다. 아주 첫 번째 BEGIN과 마지막 END를 얻기 위해 GROUP BY를 할 수 있지만, 약간의 불일치가있을 수 있습니다.

조금 도움이 되었기를 바랍니다.

+0

JET에서 작동하는 항목을 게시 할 때 +1합니다. 일정한 값에 참여할 수 없기 때문입니다. –