Запрос на предыдущее значение определённой даты

Есть запрос:

select 
        type_room_rus, period,
        case 
            when type_room_rus is not null then sum(price) / sum(area) end as price_1g
    from pbi#12_everyweekly
    where status_kv = 'AVAILABLE'
    group by type_room_rus, period
    order by type_room_rus, period

Результат запроса:

введите сюда описание изображения

Как можно сделать, чтобы справа создавалась колонка с данными из другой ячейки (предыдущего периода). Так например, в строке №2 будет справа от price_1g число из строки №1 и так далее. Проще говоря [price_1g] - 1.


Ответы (1 шт):

Автор решения: Vitaliy Zlobin

По итогу:

SELECT *, 
        LAG(price_1g, 1) OVER(ORDER BY num_month) AS prev
FROM
(
    SELECT type_room_rus,
            CASE WHEN type_room_rus IS NOT NULL THEN SUM(price) / SUM(area) END AS price_1g,
            period
    FROM pbi#12_everyweekly
    WHERE status_kv = 'AVAILABLE'
    GROUP BY type_room_rus, period
) AS Subquery
ORDER BY type_room_rus, period

Можно через CTE(если на MS SQL пишите), как Akina предлагает, а можно с подзапросом - это решение подойдёт большинству СУБД.

→ Ссылка