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                     |
+--------------------------+----------+--------------------------+


도움이 되었기를 바랍니다!

추신 Herelead 기능에 대한 자세한 설명입니다.

좋은 웹페이지 즐겨찾기