2015-01-14 3 views
0

ContactID, StartDutyDateTime, EndDutyDateTime을 가진 모든 사람의 작업을 저장하는 테이블이 있습니다. LEAD/LEG 기능으로 - 의무의 "시작"과 의무의 "끝"을 알 수 있습니다. caclulating REST Time in between 다른 작업 -이 작업이 새로운 날인지 또는 잠깐 쉬었는지 확인할 수 있습니다. 첫 번째 날짜를 selct 할 수없고 마지막 시간을 확인 할 수 없습니다. 내가 순위/행 번호를 시도 ...하지만이 저를 준다 -결합 - LEAD 및 NULL 레코드가있는 LAG inbetween - 그룹/순위?

if row is also Start/End of Duty - the time will show - otherwise it is NULL

가 어떻게 함께 의무 당 하나의 행에 병합 할 수 있습니다 리드와

FullRecord

/다리는 내가 발견 난센스 결과.

내가 필요

  • 2014년 5월 13일 5시 0분 0초 - 2014년 5월 13일 13시 25분 0초

  • 2014년 5월 17일 5시 35분 0초 - 2014년 5월 17일 13 : 20:00

(최소 자정) 최대 근무일 당 DateTime (자정 넘음도 고려)을 어떻게받을 수 있습니까?

+1

당신이 사용하고있는 DBMS? 포스트그레스? 신탁? –

+0

MS SQL 2014 데이터베이스 –

+0

이제 모든 레코드가 필터링되었습니다 - 두 열이 모두 null이 아닙니다. CTE에서 DutyEndDateTime = 0의 리드 인을 사용했습니다. 위 목록에서 예상 한 항목이 표시되었지만 몇 천 개가 넘는 매우 느린 목록이 있습니다. 더 빠른 방법이 있습니까? –

답변

0

어쩌면 내가 뭘했는지 오해했을 수도 있지만 StartDutyDate에서 간단한 그룹으로 들린 후 최소 & 개까지 들립니다.

희망이 도움이됩니다.

을 Rhys

select 
    cast(StartDutyDateTime as date) as WorkingDay, 
    min(StartDutyDateTime) as [Min], 
    max(EndDutyDateTime) as [Max] 
from 
    dbo.MyTable 
group by 
    cast(StartDutyDateTime as date) 
+0

자, 근무일은 작동하지 않습니다. 단지 22:00에서 23:45까지 - 00:20에서 03:15까지의 직무를 상상해보십시오. 전체 근무 기간은 22:00 ~ 03:15입니다. 근무일을 사용하면 2 개의 기록이됩니다. 하나가 아닌 2 개의 기록이됩니다. –

+0

@BjoernRoethig - 설명하는 내용을 반영하는 샘플 데이터로 질문을 업데이트 할 수 있습니까? 귀하가 언급 한 2 가지 임무가 동일한 근무 기간의 일부임을 나타내는 무언가가 필요합니까? 데이터가 그림이 아닌 텍스트 인 경우 도움이됩니다. –