2017-05-02 16 views
-1

이것은 Oracle 서버의 데이터에 대해 실행되는 MYSQL/SQL입니다. 나는 다음과 같은 데이터를 저장 SQL 테이블이 있습니다최고/최대 값으로 그룹화하고 차이 계산

{IMPORTID Created IMPORTREQUESTID STARTDATE  ENDDATE 
1156  04/21/2017 (12 AM) 63833   4/23/2017 18:18 4/23/2017 18:19 
1156  04/21/2017 (12 AM) 63833   4/23/2017 18:18 4/23/2017 18:18 
1156  04/21/2017 (12 AM) 63832   4/23/2017 17:56 4/23/2017 17:57 
1156  04/21/2017 (12 AM) 63832   4/23/2017 17:56 4/23/2017 17:57 
1156  04/21/2017 (12 AM) 63832   4/23/2017 17:56 4/23/2017 17:57} 

내가 쿼리 테이블을 통해 이동 찾으려을 HIGHEST 또는 특정 IMPORTID에 대한 MAX IMPORTREQUESTID 및 최대 ENDDATE. 그런 다음 최대 값을 포함하는 행을 찾으면 지정된 IMPORTID에 대해 CREATED와 max (ENDDATE)의 차이를 계산하십시오. 다시 말하지만, IMPORTREQUESTID와 ENDDATE가 주어진 IMPORTID에 묶여 있어야합니다.

{IMPORTID Created IMPORTREQUESTID STARTDATE  ENDDATE   DIFF 
1156 04/21/2017 12 AM 63833 4/23/2017 18:18 4/23/2017 18:19 **6:19**} 

그래서,이 경우는 IMPORTREQUESTID 63833는 것을 발견 다음과 같이 내 쿼리 위의 주어진 데이터는 1 행을 반환해야합니다 위해, 그래서

을 (과 IMPORTID 다른 IMPORTREQUESTIDS 여러 행이됩니다) 가장 높은 값과 그 다음 18:19의 종료 시간은 가장 높은 시간이었습니다. 그런 다음 해당 행을 선택하고 생성 된 것과 ENDDATE 사이의 차이를 계산했습니다.

 SELECT ImportID 
,A.created 
,IMPORTSTATUS 
,IMPORTCANONICALTYPE 
, to_char(StartDate,'MM/DD/YYYY HH24:MI') StartDate 
, to_char(EndDate,'MM/DD/YYYY HH24:MI') EndDate 
, ((A.created-A.Enddate)*60*24) as MinDiff 
, ImportRequestID 

FROM (SELECT DISTINCT importrequestpartdone.ImportID 
,importrequestpartdone.IMPORTCANONICALTYPE 
,importrequestpartdone.IMPORTSTATUS 
,importrequestpartdone.ImportRequestID 
, importrequestpartdone.StartDate 
, importrequestpartdone.EndDate 
,import.created 
    From import,[email protected] 
where contextid=10114 
and import.id=importrequestpartdone.importid 
and importrequestpartdone.importstatus='2I') A 

이 모든 행을 반환 : 여기

는 내가 지금까지 가지고 쿼리입니다. 위에 표시된대로 최대 값만 원합니다. 따라서 각 IMPORTID는 1 행만 반환해야합니다.

+1

당신이 설명 할 수 샘플 데이터에 대해 '6 : 19'의 차이점이 있습니까? –

+0

'StartDate','EndDate' 또는 둘 모두의 시간 구성 요소를 무시해야합니까? – toonice

+0

더 작은'ImportRequestID'는 더 최근의'EndDate'를 가질 수 있습니까? – toonice

답변

0

심지어 당신 6:19의 차이에 도착하는 방법의 차이는 단지 일분

한, 이해하지만이 시도하지 않는 생각 - 당신이 도착하는 방법을

SELECT importrequestpartdone.ImportID 
,import.created 
,importrequestpartdone.IMPORTSTATUS 
,importrequestpartdone.IMPORTCANONICALTYPE 
, to_char(StartDate,'MM/DD/YYYY HH24:MI') StartDate 
, to_char(EndDate,'MM/DD/YYYY HH24:MI') EndDate 
, ((A.created-A.Enddate)*60*24) as MinDiff 
, importrequestpartdone.ImportRequestID 

FROM [email protected] 
inner join 

(SELECT importrequestpartdone.ImportID 
,max(importrequestpartdone.ImportRequestID) as max_req_id 
, max(importrequestpartdone.EndDate) as max_end 
    From import,[email protected] 
where contextid=10114 
and import.id=importrequestpartdone.importid 
and importrequestpartdone.importstatus='2I' 
group by importrequestpartdone.ImportID) A 

on a.ImportID=importrequestpartdone.ImportID and a.max_req_id=importrequestpartdone.ImportRequestID 
and a.max_end=importrequestpartdone.EndDate 

inner join 
import 
on import.id=importrequestpartdone.importid 
where contextid=10114 
and importrequestpartdone.importstatus='2I';