테이블 행의 계산! 0 1 680

by 감동맨 [2022.07.14 19:20:27]


테이블

id    regdate    pollu     slope

1      1000       10        
2      1300      20          여기부터 계산

위의 테이블은 임의로 설정한 것 입니다.

regdate는 시간을 초로 나타낸 것이고 (임의의 값을 넣음)

pollu는 미세먼지 농도를 측정한 값입니다.(또한 임의의 값)

데이터는 5분 주기로 계속 들어올 것입니다.

slope는 기울기를 계산한 값을 넣으려고 합니다. 

기울기는 새로 들어올 데이터에서 현재 데이터를 빼려고 합니다.

따라서 id값이 1인 열 하나만 존재할때는 비교할 값이 없어서 1열의 기울기값은 존재하지 않습니다.

두번째 열부터 새로들어올 데이터(세번째 열)과의 값을 비교해서 기울기컬럼에 삽입하고싶습니다.

ex) (3번째열 pollu - 20) / (3번째열 regdate - 1300) = 2열의 slope에 값 삽입

쿼리문을 어떻게 작성해야 할지 감이 오질 않는데 도움을 주시면 감사하겠습니다

by 마농 [2022.07.14 20:05:00]

열이라고 표현한 부분은 행을 잘못 표현한 듯 하구요.
새로 들어올 3행값을 알지 못하는데? 그걸 왜 2행에 넣죠?
그런 식이면 id 1 도 id 2의 값이 있으니 계산이 되는게 맞죠?
차라리 새로운 값과의 비교가 아닌 과거 값과의 비교를 해야 맞을 것 같습니다.
이후 값과 비교하려면 LAG 대신 LEAD 사용

WITH t AS
(
SELECT 1 id, 1000 regdate, 10 pollu FROM dual
UNION ALL SELECT 2, 1300, 20 FROM dual
)
SELECT id
     , regdate
     , pollu
     , ROUND( (pollu   - LAG(pollu  ) OVER(ORDER BY id))
            / (regdate - LAG(regdate) OVER(ORDER BY id))
            , 5) slope
  FROM t
;

 

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