MySQL получить данные за предыдущий день - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть следующая таблица

Date       | amount 1    | 
-----------|-------------|
2020-01-01 | 100         | 
2020-01-02 | 120         | 
2020-01-03 | 150         | 

То, что я пытаюсь получить, - это запись за день до данных на следующий день

Date       | amount 1    | amount 2 |
-----------|-------------|----------|
2020-01-01 | 100         | 0        |
2020-01-02 | 120         | 100      |
2020-01-03 | 150         | 120      |

Я могу получить вчера, но не знаю как это сделать для всех строк.

Спасибо,

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

В MySQL <8.0, где оконные функции недоступны, один из вариантов представляет собой коррелированный подзапрос: </p>

select 
    date,
    amount,
    (
        select t1.amount 
        from mytable t1 
        where t1.date < t.date 
        order by t1.date desc limit 1
    ) prev_amount
from mytable t
0 голосов
/ 16 апреля 2020

Вы можете использовать следующий подход.

select 
    test.date1, 
    test.amount1,  
    ifnull(yestarday_test.amount1, 0) as amount2
from test
left join test yestarday_test on 
    date_sub(yestarday_test.date1, interval -1 day ) = test.date1
order by test.date1 asc
;

В этом запросе мы используем соединение одной таблицы с самим собой по дате с 1-дневной сменой.

DB Fiddle

0 голосов
/ 16 апреля 2020

Использование lag():

select date, amount,
       lag(amount, 1, 0) over (order by date) as amount_prev
from t;
...