2013-08-23 2 views
1

새 SQL dev 여기. 나는 별표 서버에 대한 통화 로그 응용 프로그램을 쓰고 있습니다. 하나의 테이블 (CDRLogs)에서 전화 시스템 (src, dst, calldate, duration)의 통화 기록이 있습니다. 다른 테이블에서 (empName, empExt, extStartDate extEndDate) 직원이 있습니다. 나는 전화의 날짜에 특정 내선을 누가 사용하고 있었는지에 근거하여 src와 empExt에 둘을 함께 참여시키고 싶다. 특정 시간 프레임에서 확장자 당 한 명의 사용자.날짜 범위를 기준으로 SQL 결합 문

예를 들어, 우리는 7 명의 달 동안 x100에 앉아있는 3 명의 다른 사용자를 가졌습니다. Employees 테이블에서 필자는이 사람들 각각이 해당 내선 사용을 시작하고 종료 한 날짜를 기록했습니다. 이를 반영하기 위해 참여를 얻으려면 어떻게해야합니까? 사전에

덕분에

+0

어떤 RDBMS를 사용하고 있습니까? 'calldate','extStartDate','extEndDate'에 대한 데이터 타입은 무엇입니까? –

+0

@Declan_K MSSQL 2008. Calldate는 datetime이고 extStartDate와 extEndDate는 smalldatetime입니다. – SouperGrover

답변

0

아마도 같은 :

SELECT A.*, B.* 
FROM CDRLOGS A 
INNER JOIN Employees B 
    ON A.SRC = B.EmpExt 
    AND A.CallDate between B.extStartDate and coalesce(B.extEndDate,getdate()) 

관련 필드와 *가 을 필요로 대체하고 사이에 조인으로 더 나은 방법이있을 수 있습니다주세요 것처럼 가능한 것 원인을 보인다 약간의 오버 헤드가 있지만, 나는 더 나은 방법을 현재 생각할 수 없다.

+0

날짜 필드 조인에서 Between을 매우주의하십시오. 한 직원에서 다른 직원으로 전환하는 방법에 따라 오류가 발생할 수 있습니다. –

+0

아주 사실입니다. 필자는 필드가 날짜 시간이고 어떤 겹침도 없다고 가정합니다. 어떤 공백도 없습니다. – xQbert

+0

@xQbert 저에게 다소 도움이됩니다. 한 사람이 현재 그 내선에 앉아 있으면 (그 연장선이 비어 있음) 그 사람의 경기가 반환되지 않는다는 점입니다. "if extenddate =" ""extenddate = today "와 같은 말을 어떻게하면 좋을까요? – SouperGrover

관련 문제