테이블
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에 값 삽입
쿼리문을 어떻게 작성해야 할지 감이 오질 않는데 도움을 주시면 감사하겠습니다
열이라고 표현한 부분은 행을 잘못 표현한 듯 하구요.
새로 들어올 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 ;