Пропущенные пропущенные значения в диапазоне 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;
Если ваши таблицы содержат данные за более чем один год, вы должны добавить условие для года в объединение, чтобы не смешивать данные за несколько лет.