Я смог решить эту проблему, используя следующую логику, надеюсь, это поможет кому-то

я две таблицы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.

Ответы на вопрос(3)

Ваш ответ на вопрос