Я хочу получить последнее доступное значение в предыдущей строке в MySQL8 в вычисляемом столбце - PullRequest
1 голос
/ 07 апреля 2020

У меня есть таблица в базе данных mysql с этими данными.

id     date          close    previous_close
1      07-10-2020    200      300   
2      06-10-2020    300      1000
3      05-10-2020    0        1000
4      04-10-2020    1000     15

Я посмотрел на использование функции lag (), но не могу обойти ее. Как создать запрос так, чтобы вычисляемый столбец previous_close получил самое последнее доступное значение в столбце close, где он не равен нулю?

1 Ответ

1 голос
/ 07 апреля 2020

Вот один из способов:

WITH cte AS (
    SELECT *,
        MAX(CASE WHEN close > 0 THEN date END) OVER
            (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS last_date
    FROM yourTable
)

SELECT
    t1.id,
    t1.date,
    t1.close,
    t2.close AS previous_close
FROM cte t1
LEFT JOIN yourTable t2
    ON t2.date = t1.last_date
ORDER BY t1.date DESC;

Стратегия здесь такова, что CTE находит самую последнюю дату, соответствующую ненулевому закрытию, происходящему строго перед каждой данной строкой, как отсортировано по свидание. Затем все, что нам нужно сделать, это присоединить этот CTE обратно к исходной таблице, чтобы найти фактическое соответствие последнего предыдущего значения закрытия.

...