PostgreSQL에서 행 사이의 델타를 찾는 방법
4657 단어 postgres
+--------------------------+----------+
| "timestamp" | "price" |
+--------------------------+----------+
| "2021-10-14 21:40:00+00" | 57681.01 |
| "2021-10-14 21:35:00+00" | 57698.41 |
| "2021-10-14 21:30:00+00" | 57575.77 |
| "2021-10-14 21:25:00+00" | 57573.92 |
+--------------------------+----------+
그리고 가격 사이의 델타를 계산하여 현재 가격이 이전 가격에 비해 얼마나 증가 또는 감소했는지 확인하려고 합니다. 이를 위해
lead()
를 사용할 수 있습니다.다음 SQL 쿼리가 있습니다.
SELECT
timestamp,
price,
lead(price) OVER (ORDER BY timestamp DESC) AS previous_price
FROM
prices;
다음 데이터를 얻습니다.
+--------------------------+----------+------------------+
| "timestamp" | "price" | "previous_price" |
+--------------------------+----------+------------------+
| "2021-10-14 21:40:00+00" | 57681.01 | 57698.41 |
| "2021-10-14 21:35:00+00" | 57698.41 | 57575.77 |
| "2021-10-14 21:30:00+00" | 57575.77 | 57573.92 |
| "2021-10-14 21:25:00+00" | 57573.92 | NULL |
+--------------------------+----------+------------------+
리드 부분을 조금 해부하면
OVER
키워드를 사용하고 데이터 주문 방법을 알려야 하며 해당 데이터에서 리드 가격 필드를 얻을 수 있음을 알 수 있습니다.이제 상대적 변화를 얻으려면 다음 공식을 적용해야 합니다.
(b - a) / a
여기서
b
는 현재 값이고 a
는 이전 값입니다.따라서 다음 쿼리로 끝낼 것입니다. 백분율로 표시하기 위해 이미 100을 곱하고 있습니다.
SELECT
timestamp,
price,
(( price - lead(price) OVER (ORDER BY timestamp DESC)) / lead(price) OVER (ORDER BY timestamp DESC)) * 100 as percentage_change
FROM
prices;
우리가 원하는 데이터 제공:
+--------------------------+----------+--------------------------+
| "timestamp" | "price" | "percentage_change" |
+--------------------------+----------+--------------------------+
| "2021-10-14 21:40:00+00" | 57681.01 | -0.030156810213661 |
| "2021-10-14 21:35:00+00" | 57698.41 | 0.213006269824962827 |
| "2021-10-14 21:30:00+00" | 57575.77 | 0.0032132604484808399359 |
| "2021-10-14 21:25:00+00" | 57573.92 | NULL |
+--------------------------+----------+--------------------------+
도움이 되었기를 바랍니다!
추신 Here은
lead
기능에 대한 자세한 설명입니다.
Reference
이 문제에 관하여(PostgreSQL에서 행 사이의 델타를 찾는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ddanielcruzz/how-to-find-the-delta-between-rows-in-postgresql-1l9l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)