Как подобрать значение накануне? - PullRequest
0 голосов
/ 16 апреля 2019

Я хотел бы получить помощь по запросу, который возвращает значение предыдущего дня?

допустим, у меня есть таблица из 2 столбцов, одна из которых содержит дату, а другая - доход (число).

Я бы хотел получать за каждый день в таблице доход предыдущего дня.

Я пытался выполнить этот запрос, но он возвращает мне только значение того же дня, а не дня до

SELECT 
date(u.creation_date),
COUNT(CASE WHEN date(u.creation_date) = date_sub(date(u.creation_date), INTERVAL 1 DAY) THEN 1 ELSE 0 END) "yestarday"
FROM user u
GROUP BY 1
ORDER BY 1;

Я ожидаю выхода дата, выручка, выручка за день до

09/04 , 1, 0
09/05 , 2, 1
09/06 , 1, 2
09/07 , 5, 1
09/08 , 4, 5

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Если у вас нет mysql 8 или выше, вам нужно использовать подзапрос или объединение. И я не знаю, почему вы используете счет для суммирования дохода.

create table t
(dt date, revenue int);
insert into t values
('2019-01-01',1),
('2019-01-01',1),
('2019-01-02',1);

select dt, sum(revenue) today,
         (select sum(revenue) from t t1 where t1.dt = t.dt - 1) yesterday
from t
group by dt;

select t.dt, sum(t.revenue) today,
         y.revenue as yesterday 
from t
left join (select dt,sum(revenue) revenue from t group by dt)  y on y.dt = t.dt -1
group by t.dt;

+------------+-------+-----------+
| dt         | today | yesterday |
+------------+-------+-----------+
| 2019-01-01 |     2 |      NULL |
| 2019-01-02 |     1 |         2 |
+------------+-------+-----------+
2 rows in set (0.00 sec)
0 голосов
/ 16 апреля 2019

Если у вас нет пробелов в таблице, вы можете сделать:

SELECT DATE(u.creation_date) + INTERVAL 1 DAY,
       COUNT(*) as yesterday,
       SUM(u.revenue) as yesterday_revenue
FROM user u
GROUP BY 1
ORDER BY 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...