Вы можете сделать это с помощью простого соединения
drop table if exists member_profile,member_token;
create table member_profile
(memberProfileNumber int, id int);
create Table member_token
(memberProfileId int,createdAt date);
insert into member_profile values
(1,1),(2,2),(3,3);
insert into member_token values
(1,'2019-01-01'),(1,'2019-01-01'),
(2,'2019-01-01'),(3,'2019-01-01'),
(1,'2019-01-02'),(2,'2019-01-02'),
(1,'2019-01-03'),(3,'2019-01-03');
select mt.createdat,count(distinct memberprofileid) todayobs,
y.createdat yesterdaydate,
max(yesterdayobs) yesterdayobs,
ifnull(count(distinct memberprofileid),0) - ifnull(max(yesterdayobs),0) changeonday
from member_token mt
left join
(select createdat,count(distinct memberprofileid) yesterdayobs
from member_token mt1
group by createdat
) y on y.createdat = date_sub(mt.createdat, interval 1 day)
group by mt.createdat;
+------------+----------+---------------+--------------+-------------+
| createdat | todayobs | yesterdaydate | yesterdayobs | changeonday |
+------------+----------+---------------+--------------+-------------+
| 2019-01-01 | 3 | NULL | NULL | 3 |
| 2019-01-02 | 2 | 2019-01-01 | 3 | -1 |
| 2019-01-03 | 2 | 2019-01-02 | 2 | 0 |
+------------+----------+---------------+--------------+-------------+
3 rows in set (0.00 sec)
Примечание 1) Я не определил месяц 2) Решение предполагает, что в таблице member_token есть запись на каждый деньЯ не видел актуальности таблицы member_profile.