[2차질문 수정]날짜(?) 통계 질문 드립니다. 0 5 1,288

by 오라클네티 [DB 기타] [2017.09.15 10:56:15]


 

 

SELECT        

        SEQ ,

        CODE ,

        DATE ,

        CASE WHEN TO_CHAR(SYSDATE,'YYMMDD') = TO_CHAR(A.DATE,'YYMMDD') THEN  
            TO_CHAR(A.DATE,'AM HH24:MI')  
        ELSE  
            TO_CHAR(A.DATE,'YYYY-MM-DD')  
        END AS DATE_AS

FROM TABLE

 

쿼리의 결과 화면입니다.

 

SEQ CODE                DATE                           DATE_AS

1    ABC$           2017-09-14 오전 10:14:37    2017-09-14
2    DS!2            2017-09-14 오전 10:14:37    2017-09-14
3    CDX4           2017-09-15 오전 10:13:24    오전 10:13
4    ABD#           2017-09-15 오전 10:14:35    오전 10:14
5    #21A           2017-09-15 오전 10:14:37    오전 10:14

 

SEQ CODE                DATE                           DATE_AS

NULL--------------------------------------------  2017-09-14

1    ABC$           2017-09-14 오전 10:14:37    오전 10:14
2    DS!2            2017-09-14 오전 10:14:37    오전 10:14

NULL--------------------------------------------  2017-09-15
3    CDX4           2017-09-15 오전 10:13:24    오전 10:13
4    ABD#           2017-09-15 오전 10:14:35    오전 10:14
5    #21A           2017-09-15 오전 10:14:37     오전 10:14

 

위와 같이 결과를 조회하고 싶은데 어떻게 쿼리를 작성해야할지 감이 안와서 질문드립니다. 도와주세요~

 

 

by jkson [2017.09.15 11:12:29]

with t(dt) as
(
select sysdate - 1 from dual union all
select sysdate - 1.2 from dual union all
select sysdate - 1.4 from dual union all
select sysdate from dual union all
select sysdate + 0.2 from dual union all
select sysdate + 0.4 from dual
)
select dt, nvl(to_char(dt,'AM HH:MI'),to_char(dt,'YYYY-MM-DD')) tmm   
  from t
--group by to_char(dt,'YYYY-MM-DD'), rollup((dt, to_char(dt,'AM HH24:MI')))
--중복 시간이 있을 수도 있군요~ 마농님댓글 보고 수정
group by to_char(dt,'YYYY-MM-DD'), rollup((dt, rownum))  
order by to_char(dt,'YYYY-MM-DD'), dt nulls first

by 우리집아찌 [2017.09.15 11:16:55]
WITH T AS (
SELECT TO_DATE('2017-09-14 10:14:37','YYYY-MM-DD HH24:MI:SS') DT FROM DUAL UNION ALL
SELECT TO_DATE('2017-09-14 10:14:37','YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL
SELECT TO_DATE('2017-09-15 10:13:24','YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL
SELECT TO_DATE('2017-09-15 10:14:35','YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL
SELECT TO_DATE('2017-09-15 10:14:37','YYYY-MM-DD HH24:MI:SS') FROM DUAL 
)

SELECT DECODE(GB,1,NULL,DT1) AS "DATE" ,  DATE_AS
  FROM (
        SELECT 2 GB 
             , TO_CHAR(A.DT,'YYYY-MM-DD AM HH24:MI:SS' ) AS DT1
             , TO_CHAR(A.DT,'AM HH24:MI' )  DATE_AS
         FROM T A
        
        UNION ALL
        
         SELECT DISTINCT 1 GB , TO_CHAR(B.DT,'YYYY-MM-DD')  , TO_CHAR(B.DT,'YYYY-MM-DD') 
           FROM T B
        
        ORDER BY DT1 , GB
        )

 


by 마농 [2017.09.15 11:25:41]

am 을 쓰려면 hh 를 써야죠.
hh24 를 쓰려면 am 을 빼야 하고요.

SELECT dt
     , NVL(TO_CHAR(dt, 'am hh:mi'), TO_CHAR(dt, 'yyyy-mm-dd')) x
  FROM t
 GROUP BY TO_CHAR(dt, 'yyyy-mm-dd'), ROLLUP((dt, ROWNUM))
 ORDER BY TO_CHAR(dt, 'yyyy-mm-dd'), dt NULLS FIRST
;

 


by 우리집아찌 [2017.09.15 11:37:33]

아.. 맞다.. ^^;


by 마농 [2017.09.15 14:16:27]
WITH t AS
(
SELECT 1 seq, 'ABC$' code, TO_DATE('2017-09-14 10:14:37', 'yyyy-mm-dd hh24:mi:ss') dt FROM dual
UNION ALL SELECT 2, 'DS!2', TO_DATE('2017-09-14 10:14:37', 'yyyy-mm-dd hh24:mi:ss') FROM dual
UNION ALL SELECT 3, 'CDX4', TO_DATE('2017-09-15 10:13:24', 'yyyy-mm-dd hh24:mi:ss') FROM dual
UNION ALL SELECT 4, 'ABD#', TO_DATE('2017-09-15 10:14:35', 'yyyy-mm-dd hh24:mi:ss') FROM dual
UNION ALL SELECT 5, '#21A', TO_DATE('2017-09-15 10:14:37', 'yyyy-mm-dd hh24:mi:ss') FROM dual
)
SELECT seq, code, dt
     , NVL(TO_CHAR(dt, 'am hh:mi'), TO_CHAR(dt, 'yyyy-mm-dd')) date_as
  FROM t
 GROUP BY TO_CHAR(dt, 'yyyy-mm-dd'), ROLLUP((seq, code, dt))
 ORDER BY TO_CHAR(dt, 'yyyy-mm-dd'), dt NULLS FIRST
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입