database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41193 게시물 읽기
No. 41193
작업시간그룹 기준 최초 최종 가져오기 문의 드립니다.
작성자
김미림
작성일
2016-07-04 13:20
조회수
7,376

 

 

 

안녕하세요

작업자 편의사항 인데요

 

생각보다 많이 힘드네요

 

 

작업자들이 시간(초)단위로 작업한 파일이 있습니다

 

 

근데 작업을 완료 하지 않았을경우나 부득이 하게 종료했을경우 정전이 되었을경우나 등등

 

선택한 시간기준으로 맨앞의 값과 맨끝의 값을 가져오고 싶습니다.

 

최초의 값과 끝의 값을 가져오고 목록을 로드한 다음 끝의 값의 기준으로

 

작업을 연결 시키고 싶습니다.

 

 

데이타는 초단위 기준의 0~2초기준으로 연결 되어 있습니다.

 

자정을 넘는경우도 있어서 이게 문제네요

 

0~2초 기준에 부합되지 않을경우는 다른 그룹 데이터 입니다.

 

 

해당 그룹 이후의 최초값도 가져와서 충돌을 방지하고 싶습니다. 없으면 null 입니다.

 

데이타는 다음과 같습니다.

 

 

WITH T AS (

 

SELECT TO_DATE ( START_DATE , 'YYYY-MM-DD HH24:MI:SS') START_DATE , TO_DATE ( END_DATE , 'YYYY-MM-DD HH24:MI:SS') END_DATE FROM (

 

 

 

Select '2016-01-27 04:55:35' , '2016-01-27 04:56:00' from dual UNION ALL

Select '2016-01-27 04:56:00' , '2016-01-27 05:00:37' from dual UNION ALL

Select '2016-01-27 05:00:37' , '2016-01-27 05:00:44' from dual UNION ALL

Select '2016-01-27 05:00:44' , '2016-01-27 05:07:54' from dual UNION ALL

Select '2016-01-27 05:07:54' , '2016-01-27 05:08:01' from dual UNION ALL

Select '2016-01-27 05:08:01' , '2016-01-27 05:08:10' from dual UNION ALL

Select '2016-01-27 05:08:11' , '2016-01-27 05:13:44' from dual UNION ALL

Select '2016-01-27 05:13:44' , '2016-01-27 05:13:59' from dual UNION ALL

Select '2016-01-27 05:13:59' , '2016-01-27 05:55:11' from dual UNION ALL

Select '2016-01-27 05:55:11' , '2016-01-27 05:55:23' from dual UNION ALL

Select '2016-01-27 05:55:23' , '2016-01-27 05:55:33' from dual UNION ALL

Select '2016-01-27 05:55:33' , '2016-01-27 06:00:12' from dual UNION ALL

Select '2016-01-27 06:00:12' , '2016-01-27 06:00:37' from dual UNION ALL

 

------------------------------------------------------------------------------------------------------

Select '2016-01-27 06:20:36' , '2016-01-27 06:20:45' from dual UNION ALL

Select '2016-01-27 06:20:45' , '2016-01-27 06:22:38' from dual UNION ALL

Select '2016-01-27 06:22:38' , '2016-01-27 06:22:59' from dual UNION ALL

Select '2016-01-27 06:22:59' , '2016-01-27 06:23:45' from dual UNION ALL

Select '2016-01-27 06:23:45' , '2016-01-27 06:24:15' from dual UNION ALL

Select '2016-01-27 06:24:15' , '2016-01-27 06:24:46' from dual UNION ALL

Select '2016-01-27 06:24:46' , '2016-01-27 07:43:05' from dual UNION ALL

Select '2016-01-27 07:43:05' , '2016-01-27 07:45:21' from dual UNION ALL

Select '2016-01-27 07:45:21' , '2016-01-27 07:46:10' from dual UNION ALL

Select '2016-01-27 07:46:10' , '2016-01-27 07:46:20' from dual UNION ALL

Select '2016-01-27 07:46:20' , '2016-01-27 07:47:41' from dual UNION ALL

Select '2016-01-27 07:47:41' , '2016-01-27 07:49:31' from dual UNION ALL

Select '2016-01-27 07:49:31' , '2016-01-27 07:49:51' from dual UNION ALL

Select '2016-01-27 07:49:51' , '2016-01-27 07:50:37' from dual UNION ALL

Select '2016-01-27 07:50:37' , '2016-01-27 08:24:47' from dual UNION ALL

Select '2016-01-27 08:24:47' , '2016-01-27 08:25:49' from dual UNION ALL

 

 

------------------------------------------------------------------------------------------------------

 

 

Select '2016-01-27 09:26:55' , '2016-01-27 09:30:21' from dual UNION ALL

Select '2016-01-27 09:30:21' , '2016-01-27 09:30:27' from dual UNION ALL

Select '2016-01-27 09:30:27' , '2016-01-27 09:30:44' from dual UNION ALL

Select '2016-01-27 09:30:44' , '2016-01-27 09:42:23' from dual UNION ALL

Select '2016-01-27 09:42:23' , '2016-01-27 09:42:30' from dual UNION ALL

Select '2016-01-27 09:42:30' , '2016-01-27 09:42:40' from dual UNION ALL

Select '2016-01-27 09:42:40' , '2016-01-27 09:43:30' from dual UNION ALL

Select '2016-01-27 09:43:30' , '2016-01-27 09:43:50' from dual UNION ALL

Select '2016-01-27 09:43:50' , '2016-01-27 09:44:06' from dual

 

 

 

)

)

 

SELECT * FROM T

 

 

 

2016-01-27 06:24:00 기준이라면

 

최초작업일자는 2016-01-27 06:20:36 이며

최종 작업일자는 2016-01-27 08:25:49

 

제한선은 2016-01-27 09:26:55 입니다.

 

 

 

감사합니다.

 

이 글에 대한 댓글이 총 2건 있습니다.

SELECT start_date
     , end_date
     , limit_date
  FROM (SELECT MIN(start_date) start_date
             , MAX(  end_date)   end_date
             , LEAD(MIN(start_date)) OVER(ORDER BY grp) limit_date
          FROM (SELECT start_date, end_date
                     , SUM(flag) OVER(ORDER BY start_date) grp
                  FROM (SELECT start_date, end_date
                             , CASE WHEN
                                    LAG(end_date) OVER(ORDER BY start_date)
                                    >= start_date - 2/24/60/60
                               THEN 0 ELSE 1 END flag
                          FROM t
                        )
                )
         GROUP BY grp
        )
 WHERE TO_DATE('2016-01-27 06:24:00', 'yyyy-mm-dd hh24:mi:ss')
       BETWEEN start_date AND end_date
;

마농(manon94)님이 2016-07-04 15:41에 작성한 댓글입니다.

마농님 너무 감사합니다.

정말 감탄했습니다.

기가막히네요

 

잘 쓰겠습니다.

 

감사합니다.

김미림님이 2016-07-04 15:56에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41196ㅂㅈㄷㅂㅈ [1]
강컴공
2016-07-12
6901
4119511g se 에 em 설치가 가능한가요?
남영민
2016-07-07
6901
41194실용성 있는 sql 퀴즈입니다. [5]
김흥수
2016-07-07
9821
41193작업시간그룹 기준 최초 최종 가져오기 문의 드립니다. [2]
김미림
2016-07-04
7376
41192오라클 쿼리에 버그가 있네요... [1]
김흥수
2016-07-03
7313
41191update sql 퀴즈입니다. [2]
김흥수
2016-06-30
7266
41190이 sql 의 문제 무엇일까요. 의견부탁드려요. [2]
니노
2016-06-29
7246
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다