Пропущенные пропущенные значения в диапазоне mysql

Я уже задавал подобный вопрос, но я все еще не могу разобраться с этим. У меня есть столбец device_create_date в моей базе данных SQL

2015-07-14 12:35:19
2015-07-15 12:45:37
2015-07-15 12:45:37
2015-07-16 12:35:37
2015-08-14 10:35:21
2015-08-14 12:15:36

Я агрегирую эти значения даты в неделях, но между неделями отсутствуют значения, и я хочу, чтобы эти значения были равны 0, чтобы я мог сопоставить их с другими показателями в таблице Excel. Я создал фиктивную таблицу "date", чтобы объединить значения, чтобы select возвращал 0 для недель, для которых нет значений.

Вот запрос, который я использовал,

select date.year, week(device.device_create_date), count(*)
from device 
join date
on date.week_of_year=week(device.device_create_date)
where device.id_customer = 1
group by device.year, date.WEEK_OF_YEAR
order by device.year, date.week_of_year;

Вот что я получил,

2010    26  7252
2010    31  3108
2010    45  7203
2010    1   9324
2010    2   7252
2010    3   2072

Вот то, что я хочу вернуть мне;

2010 1  9324
2010 2  7252
2010 3  2072
2010 4  0
2010 5  0
2010 6  0 
etc

Кстати, эти значения тоже не совпадают с количеством в базе данных, так что я знаю, что делаю что-то не так, но я не очень хорош в этом, поэтому любая помощь и руководство будут высоко оценены.

Заранее спасибо!!

1 ответ

Решение

Поскольку вы всегда хотите значения от date таблица (чтобы получить все возможные даты) и соответствующие строки из device вы хотите использовать date в качестве источника и использовать left join с device стол с inner join будет возвращать только те данные, которые совпадают в обеих таблицах.

Попробуйте это вместо этого:

select date.year, date.week_of_year, count(device.device_create_date) 
from date
left join device on date.week_of_year = week(device.device_create_date) 
                and device.id_customer = 1
group by date.year, date.week_of_year
order by date.year, date.week_of_year;

Если ваши таблицы содержат данные за более чем один год, вы должны добавить условие для года в объединение, чтобы не смешивать данные за несколько лет.

Другие вопросы по тегам