약간의 문제가있어 솔루션을 찾을 수 있기를 바랍니다.첫 번째 등록 된 행을 사용하여 UserID에 대한 다음 첫 번째 레코드 찾기
PersonID RowID Reg_date Reg_Time Process_first_Date Process_first_time Process_Last_Date Process_Last_time End_date End_Time
======== ========= ========== ======== ================== ================== ================= ================= ========== ========
05634222 3341278/2 01/01/2014 13:45 01/01/2014 13:45 02/01/2014 12:16 04/01/2014 18:22
05634222 3341278/6 01/01/2014 13:45 02/01/2014 12:20 03/01/2014 16:43 04/01/2014 18:22
05634222 3341278/4 01/01/2014 13:45 03/01/2014 16:48 04/01/2014 18:22 04/01/2014 18:22
08674315 8445732/1 12/01/2014 18:20 12/01/2014 18:20 13/01/2014 14:08 16/01/2014 10:12
08674315 8445732/6 12/01/2014 18:20 13/01/2014 14:12 14/01/2014 12:02 16/01/2014 10:12
08674315 8445732/8 12/01/2014 18:20 14/01/2014 12:12 16/01/2014 10:12 16/01/2014 10:12
을 주목 process_end_date/시간 일치 각 personID
등록 날짜/시간 및 process_first_time
일치 행 하나에 한 행의 종료 날짜/시간 :이 같은 설정 데이터를 말한다. 이것들은 입출력 과정들 - 그 과정들에 대한 첫 번째와 마지막 등록입니다.
PersonID
은 첫 번째 및 마지막 등록 내에서 하나 이상의 프로세스를 가질 수 있습니다. 특정 기간에 이러한 최초 및 최종 등록의 여러 세트를 가질 수 있습니다.
그래서 내가 원하는 것은 특정 기간 동안 reg 날짜와 첫 번째 프로세스 날짜와 시간을 일치시켜 모든 첫 번째 등록을 사용하는 것입니다. 그러나 모든 첫 번째 등록을 얻지 만 한 사람에 대해 여러 개의 첫 번째 reg가있을 수 있음을 기억하십시오. 그 기간은 예를 들어 1 일에 하나, 8 일에 하나, 10 일에 하나; 1 개월 동안보고 있으면 1 위를 원합니다.
나는 등록 날짜별로 PersonID
주문을하여 분할, 내가 행 ID 파티션을 넣을 수있는 아이디어를 내놓았다 그리고 이것은 얻을 것 I 위의 데이터 집합 즉, 내가 원하는 것을 준 :
PersonID Row_partition RowID Reg_date Reg_Time Process_first_Date Process_first_time Process_Last_Date Process_Last_time End_date End_Time
======== ============= ========= ========== ======== ================== ================== ================= ================= ========== ========
05634222 1 3341278/2 01/01/2014 13:45 01/01/2014 13:45 02/01/2014 12:16 04/01/2014 18:22
08674315 1 8445732/1 12/01/2014 18:20 12/01/2014 18:20 13/01/2014 14:08 16/01/2014 10:12
이제 각 PersonID의 첫 번째 reg가 있는데 하위 쿼리 또는 인라인보기에서이 속성을 사용하려고합니다. 내가 어떻게이 일을 할 수 있는지 잘 모르겠다.
그래서 나는 나에게이 첫 번째 등록주고 쿼리 아래와 같습니다
SELECT *
FROM(
select PersonID
,Row_partition SEQ
,RowID
,Reg_date
,Reg_Time
,Process_first_Date
,Process_first_time
,Process_Last_Date
,Process_Last_time
,End_date
,End_Time
FROM PERSON INNER JOIN PROCESS_ACTIVITY ON (PERSON.PERSON_KEY=PROCESS_ACTIVITY.PERSON_KEY)
RIGHT OUTER JOIN TIME PROCESS_START ON (PROCESS_START.DATE_KEY=PROCESS_ACTIVITY.PROCESS_START_DATE_KEY)
RIGHT OUTER JOIN TIME PROCESS_END ON (PROCESS_END.DATE_KEY=PROCESS_ACTIVITY.PROCESS_END_DATE_KEY)
RIGHT OUTER JOIN TIME REGDATE ON (REGDATE.DATEKEY=PROCESS_ACTIVITY.REG_DATE_KEY)
RIGHT OUTER JOIN TIME ENDDATE ON (ENDDATE.DATEKEY=PROCESS_ACTIVITY.END_DATE_KEY)
RIGHT OUTER JOIN DEPT ON (DEPT.DEP_KEY=PROCESS_ACTIVITY.FCE_DEP_KEY)
INNER JOIN STAY ON (STAY_KEY=PROCESS_ACTIVITY.FCE_STAY_KEY)
RIGHT OUTER JOIN dbo.LEAVECONDIT ON (dbo.LEAVECONDIT.D_PAC_LEAVECONDIT_KEY=PROCESS_ACTIVITY.LEAVECONDIT_KEY)
WHERE REGDATE.FULLDATE BETWEEN '20140101' AND '20141231'
AND DEPT.DEPT_DESC In ('DEPT1','DEPT2','DEPT3','DEPT4','DEPT5','DEPT6','DEPT7','DEPT8','DEPT9')
AND dbo.LEAVECONDIT.LEAVE_CODE IN ('18','52','16','42','12','22','40','53','48')
AND REGDATE.FULLDATE = PROCESS_START.FULLDATE
AND convert(varchar(5),PROCESS_ACTIVITY.REG_TIME, 108) = convert(varchar(5),PROCESS_ACTIVITY.PROCESS_FIRST_TIME, 108)
)B
WHERE B.SEQ = 1
을 그리고 나는 이것을 사용할 수 있다면 효과적으로 동일한 데이터 세트에 가입하고 첫 번째 후 다음 등록을 찾아 궁금 그 기간 동안의 것들?
희망이 없다면 나는 더 이상 설명 할 수 없다.
앤드류
편집 : 2 사람 ID를가 2014년 8월 1일 각각 15/01/2014에 다음 등록을 한 경우 마지막 출력, 출력은 다음과 같이 될 것이다 :
내가 할 경우PersonID RowID Reg_date Reg_Time Process_first_Date Process_first_time Process_Last_Date Process_Last_time End_date End_Time
======== ========= ========== ======== ================== ================== ================= ================= ========== ========
05634222 3368432/5 08/01/2014 16:00 08/01/2014 16:00 09/01/2014 18:06 10/01/2014 13:04
08674315 8653358/1 15/01/2014 12:20 15/01/2014 12:20 18/01/2014 14:14 19/01/2014 10:12
마지막 결과가 어떻게 표시 될 수 있습니까? 외부 적용을 사용하면 다음 레코드를 검색 할 수 있습니다. – mxix
@mxix 두 개의 첫 번째 등록 (각 personID 당 하나씩)을 기반으로 출력 내용을 포함했습니다. – Andrew
첫 번째 등록을 기반으로 출력을 포함하거나 원래 데이터에 출력을 포함시킬 수 있습니까? 어떤 행을 당신이 무엇에 합류하려고합니까? – mxix