У меня есть таблица, daily
, следующая:
|date|high|low|
Я пытаюсь вернуть максимальную положительную или отрицательную разницу для каждого N-дневного окна данных.Например, следующий запрос очень близко подходит к пятидневному окну:
SELECT date, high, low, (high - low) AS diff
FROM (
SELECT dd.date AS date,
MAX(dd.high)
OVER(ORDER BY dd.date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS high,
MIN(dd.low)
OVER(ORDER BY dd.date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS low
FROM daily dd
) AS win
ORDER BY date
Однако этот запрос неверен, поскольку результат всегда будет положительным.Если максимум произошел до минимума, результат должен быть отрицательным.Есть ли способ сделать это с помощью запроса?
РЕДАКТИРОВАТЬ: Добавление примеров и ожидаемый результат
РЕДАКТИРОВАНИЕ2: Изменено с лучшим примером
|date |high|low|
|01-01-2001|20 |10 |
|01-02-2001|30 |20 |
|01-03-2001|40 |30 |
|01-04-2001|30 |25 |
|01-05-2001|35 |25 |
Результат за 5 днейдолжно быть:
|date |high|low|diff|
|01-01-2001|20 |10 |10 |
|01-02-2001|30 |10 |20 |
|01-03-2001|40 |10 |30 |
|01-04-2001|40 |10 |30 |
|01-05-2001|40 |10 |30 |
Результат за 3 дня должен быть:
|01-01-2001|20 |10 |10 |
|01-02-2001|30 |10 |20 |
|01-03-2001|40 |10 |10 |
|01-04-2001|40 |20 |20 |
|01-05-2001|40 |25 |-15 |