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 38839 게시물 읽기
No. 38839
오라클 시간계산시 익일 시간
작성자
강영호
작성일
2011-09-03 19:26
조회수
5,201

  SELECT * FROM                           

        (                               
        SELECT                          
        A.L_UID                         
        ,A.C_NAME, A.C_ORG, A.C_TEAM, A.C_SUB_TEAM, A.C_TITLE, A.C_SHIFT                                
        , B.C_DATE,  MIN(DECODE(L_MODE, '1', C_TIME)) ATTENT, MAX(DECODE(L_MODE, '2', C_TIME)) LEAVE
        , ROUND(TRUNC(TO_DATE(MIN(DECODE(L_MODE, '2', C_DATE||C_TIME)), 'yyyymmddHH24MISS') - 
         TO_DATE(MIN(DECODE(L_MODE, '1', C_DATE||C_TIME)), 'yyyymmddHH24MISS'),6)*24)  AS W_HOURS                         
        FROM RUS_TEST.IF_FINGER_EMPLOYEE A, RUS_TEST.IF_FINGER B                                
        WHERE  A.L_UID = B.L_UID(+)                             
        AND B.C_DATE(+) BETWEEN '20110901' AND '20110902'                         
        GROUP BY  A.L_UID, A.C_NAME, A.C_ORG, A.C_TEAM, A.C_SUB_TEAM, A.C_TITLE, A.C_SHIFT, B.C_DATE                            
        )                               
        WHERE C_ORG LIKE '%' 
        AND  UPPER(C_SUB_TEAM) LIKE '%' ||'%'                   
        AND C_SHIFT LIKE '%'         
        AND C_DATE IS NOT NULL
 
안녕하십니까. 근태 쿼리를 하다가 안되는게 있어서 도움을 받고자 글을 올립니다.
위의 쿼리를 실행하면 아래의 결과 가 나옵니다.
 
L_UID C_NAME C_ORG C_TEAM C_SUB_TEAM C_TITLE C_SHIFT C_DATE ATTENT LEAVE W_HOURS
567 A AA AAA AAAA AAAA B 20110901 074808 075343 0
303 B BB BBB BBBB BBBB A 20110901 025304 074857 1
959 C CC CCC CCCC CCCC C 20110901 221920 075017 -20
739 D DD DDD DDDD DDDD B 20110901 025649 075134 5
906 E EE EEE EEEE EEEE A 20110901 152449 224939 4
.
.
 
나머지는 해당 일에 정상적인 시간계산결과가 나오는데 문제점이 9월1일 밤 10시에 시작하여 9월2일 아침 7시에 일이끝나다보니
그룹으로 묶는과정에서 9월1일로 묶이고 결과가 -20 이 나옵니다.
 
어떻게 하면 정상적인 결과를 볼수 있을지 도움 부탁드립니다.
감사합니다.

 

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

그룹바이 항목에서 날짜를 제외시키면 되는거 아닌가요?

마농(manon94)님이 2011-09-05 09:34에 작성한 댓글입니다.

 마농님  데이트를 그룹바이에서 제외시켠 not a groupby... 이 에로가 나와서요..ㅜㅜ

강영호님이 2011-09-05 12:58에 작성한 댓글입니다. Edit

그룹바이에 없는 항목이 select 절에 있어서 그렇죠.

Select 절에서도 빼시던가 Min 또는 Max로 처리하시던가 하셔야죠.

마농(manon94)님이 2011-09-05 14:30에 작성한 댓글입니다.

WITH TBL1 AS (
              SELECT '567' AUID, 'A' NAME, 'AA' ORG, 'AAA' TEAM, 'AAAA' STEAM , 'AAAA' TITLE, 'B' SHIFT  FROM DUAL UNION ALL
              SELECT '303'     , 'B'     , 'BB'    , 'BBB'     , 'BBBB'       , 'BBBB'      , 'A'        FROM DUAL UNION ALL
              SELECT '959'     , 'C'     , 'CC'    , 'CCC'     , 'CCCC'       , 'CCCC'      , 'C'        FROM DUAL UNION ALL
              SELECT '739'     , 'D'     , 'DD'    , 'DDD'     , 'DDDD'       , 'DDDD'      , 'B'        FROM DUAL UNION ALL
              SELECT '906'     , 'E'     , 'EE'    , 'EEE'     , 'EEEE'       , 'EEEE'      , 'A'        FROM DUAL
             ),
     TBL2 AS (  
              SELECT '567' AUID, '20110901' L_DATE, '1' L_MODE, '074808' L_TIME FROM DUAL UNION ALL
              SELECT '567'     , '20110901'       , '2'       , '075343'        FROM DUAL UNION ALL
              SELECT '303'     , '20110901'       , '1'       , '025304'        FROM DUAL UNION ALL
              SELECT '303'     , '20110901'       , '2'       , '074857'        FROM DUAL UNION ALL
              SELECT '959'     , '20110901'       , '1'       , '221920'        FROM DUAL UNION ALL
              SELECT '959'     , '20110902'       , '2'       , '075017'        FROM DUAL UNION ALL
              SELECT '739'     , '20110901'       , '1'       , '025649'        FROM DUAL UNION ALL
              SELECT '739'     , '20110901'       , '2'       , '075134'        FROM DUAL UNION ALL
              SELECT '906'     , '20110901'       , '1'       , '152449'        FROM DUAL UNION ALL
              SELECT '906'     , '20110901'       , '2'       , '224939'        FROM DUAL
             )                                                                      
SELECT  *
  FROM                                                                                                                                                                                
        (                                                                                                                      
         SELECT                                                                                                                 
                 A.AUID                                                                                                                
                ,A.NAME
                ,A.ORG
                ,A.TEAM
                ,A.STEAM
                ,A.TITLE
                ,A.SHIFT                                                       
                ,MAX(B.L_DATE)
                ,MIN(DECODE(L_MODE, '1', L_TIME)) ATTENT
                ,MAX(DECODE(L_MODE, '2', L_TIME)) LEAVE                           
                ,ROUND(TRUNC(TO_DATE(MIN(DECODE(L_MODE, '2', L_DATE || L_TIME)), 'yyyymmddHH24MISS') -                                  
                             TO_DATE(MIN(DECODE(L_MODE, '1', L_DATE || L_TIME)), 'yyyymmddHH24MISS'),6)*24)  AS W_HOURS                              
           FROM  TBL1 A
                ,TBL2 B                                                               
          WHERE  A.AUID   = B.AUID(+)                                                                                            
            AND  B.L_DATE(+) BETWEEN '20110901' AND '20110902'
            AND  B.L_DATE IS NOT NULL                                                                      
          GROUP  BY A.AUID, A.NAME, A.ORG, A.TEAM, A.STEAM, A.TITLE, A.SHIFT                        
        )                                                                                                                      
 WHERE  ORG LIKE '%'                                                                                                   
   AND  UPPER(STEAM) LIKE '%' || '%'                                                                                  
   AND  SHIFT LIKE '%';

이강실님이 2011-09-05 14:48에 작성한 댓글입니다. Edit

 마농님 강실님 감사합니다.

SQL 쓸때마다 느끼는거지만  안되는게 없는것 같습니다.

다시한번 감사드립니다. ^^

강영호님이 2011-09-05 14:58에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
38842SQL로 CarrageReturn 처리하는 방법? [1]
윤석민
2011-09-05
4176
38841쿼리 비효율 ? [2]
김진국
2011-09-05
4093
38840프로시져가 무한 루프를 도는 것 같은데요 [7]
최두철
2011-09-05
7720
38839오라클 시간계산시 익일 시간 [5]
강영호
2011-09-03
5201
38838interpolation SQL 을 어떻게 구현하면 빠를까요?
부족한
2011-09-02
3313
38837단건을 여러건으로 [1]
HJLEE
2011-09-02
3663
38836group by를 사용할 때의 where에 대해서 질문드립니다. [2]
서기라
2011-09-02
3594
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다