Я смог решить эту проблему, используя следующую логику, надеюсь, это поможет кому-то
я две таблицыuser_profile
а такжеtracked_search
,user_profile
таблица содержит данные пользователя иtracked_search
отслеживает поиски, сделанные каждым пользователем.
Всякий раз, когда пользователь выполняет поиск, эта поисковая запись попадает вtracked_search
Таблица. Если ничего не найдено для конкретной даты, ничего не добавляется вtracked_search
.
Мне нужно составить отчет, в котором во все дни месяца нужно указывать, сколько пользователей совершали поиски.
Например:
CREATE TABLE tracked_search (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
created DATE,
user_id int NOT NULL
);
INSERT INTO tracked_search(created, user_id) VALUES
('2017-10-01', 1000),
('2017-10-01', 1000),
('2017-10-01', 2000),
('2017-10-01', 3000),
('2017-10-01', 4000),
('2017-10-04', 1000),
('2017-10-04', 2000),
('2017-10-04', 2000),
('2017-10-04', 2000),
('2017-10-04', 2000),
('2017-10-04', 3000),
('2017-10-31', 1000),
('2017-10-31', 2000),
('2017-10-31', 3000),
('2017-10-31', 4000),
('2017-10-31', 5000);
Желаемый вывод:
Date user_count
2017-10-01 4
2017-10-02 0
2017-10-03 0
2017-10-04 3
2017-10-05 0
...
2017-10-30 0
2017-10-31 5
Я написал следующий запрос
SELECT ts.created , count( distinct ts.user_id) FROM tracked_search ts, user_profile u
WHERE ts.created>=(CURDATE()-INTERVAL 1 MONTH) AND u.id = ts.user_id
group by ts.created;
но я получаю
Date user_count
2017-10-01 4
2017-10-04 3
2017-10-31 5
Мне нужно напечатать значения всех дней, если нет записи для конкретной даты, она должна быть равна нулю.
Я использую MySQL.