N분 단위의 합계 0 3 224

by 게스트 [PL/SQL] Oracle11g [2019.08.12 10:48:18]


안녕하세요 

 

고민해보다 몰라서 질문드립니다

varchar2         

200912151900 51.3742
200912151901 51.3624
200912151902 51.3498
200912151903 51.3340
200912151904 51.3249
200912151905 51.3192
200912151906 51.3096
200912151907 51.3069
200912151908 51.3127
200912151909 51.3158
200912151910 51.3062
200912151911 51.2937
200912151912 51.2888

...

201812292358 51.2345

201812292359 51.3363

이런식으로 데이터가 구성되어있습니다.

 

n분단위로 나눠서 합계를 더해야 합니다

 

만약 2분 단위일 때는 

200912151900 51.3742
200912151901 51.3624

200912151902 51.3498
200912151903 51.3340

...

201812292358 51.2345

201812292359 51.3363

과 같이 구성 되어 있습니다

200912151900 102.7366

200912151902 102.6838

...

200912191902 102.6838

으로 나와야 합니다.

 

시작은 '20091215' 같은 형태로 주어집니다.

 

만약에 5분단위로 하고 +4일(고정) 후로 하면

시작시점이 20091215일 00시00분이면 끝인 날짜는 + 4일 인 20091219일 2355 로 끝나야 합니다.

읽어주셔서 감사합니다.

by 마농 [2019.08.12 11:30:02]

검색 기간 조건은 없나요?
몇분 단위로 자르려면 시작시간 조건이 있어야 할 것 같은데요?


by 게스트 [2019.08.12 12:41:47]

본문에 내용이 부족해 추가하였습니다.

보기 편하시게 여기도 덧붙입니다.

시작은 '20091215' 같은 형태로 주어집니다.

만약에 5분단위로 하고 +4일 후(고정)로 하면

시작시점이 20091215일 00시00분이면 끝인 날짜는 + 4일 인 20091219일 2355 로 끝나야 합니다.



http://www.gurubee.net/article/60407 를 참고하니 하루는 되는데 n일 후까지를 구하고 싶습니다.


by 마농 [2019.08.12 13:40:20]
WITH t AS
(
SELECT '200912151900' dt, 51.3742 v FROM dual
UNION ALL SELECT '200912151901', 51.3624 FROM dual
UNION ALL SELECT '200912151902', 51.3498 FROM dual
UNION ALL SELECT '200912151903', 51.3340 FROM dual
UNION ALL SELECT '200912151904', 51.3249 FROM dual
UNION ALL SELECT '200912151905', 51.3192 FROM dual
UNION ALL SELECT '200912151906', 51.3096 FROM dual
UNION ALL SELECT '200912151907', 51.3069 FROM dual
UNION ALL SELECT '200912151908', 51.3127 FROM dual
UNION ALL SELECT '200912151909', 51.3158 FROM dual
UNION ALL SELECT '200912151910', 51.3062 FROM dual
UNION ALL SELECT '200912151911', 51.2937 FROM dual
UNION ALL SELECT '200912151912', 51.2888 FROM dual
)
SELECT b.sdt
     , SUM(a.v) v
  FROM t a
     , (SELECT TO_CHAR(dt + (LEVEL-1)*mi * 1/24/60, 'yyyymmddhh24mi') sdt
             , TO_CHAR(LEAST(dt + LEVEL*mi * 1/24/60, dt + 4 + 1), 'yyyymmddhh24mi') edt
          FROM (SELECT TO_DATE('20091215', 'yyyymmdd') dt
                     , 2 mi
                  FROM dual
                )
         CONNECT BY dt + (LEVEL-1)*mi * 1/24/60 < dt + 4 + 1
        ) b
 WHERE a.dt >= b.sdt
   AND a.dt <  b.edt
 GROUP BY b.sdt
 ORDER BY sdt
;

 

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