У меня есть стол с 2 колонками, дата и оценка. Он имеет не более 30 записей за каждый из последних 30 дней.MySQL, как заполнить отсутствующие даты в диапазоне?
date score
-----------------
1.8.2010 19
2.8.2010 21
4.8.2010 14
7.8.2010 10
10.8.2010 14
Моя проблема заключается в том, что некоторые даты отсутствуют, - я хочу видеть:
date score
-----------------
1.8.2010 19
2.8.2010 21
3.8.2010 0
4.8.2010 14
5.8.2010 0
6.8.2010 0
7.8.2010 10
...
Что мне нужно от одного запроса, чтобы получить: 19,21,9,14,0,0 , 10,0,0,14 ... Это означает, что недостающие даты заполняются 0.
Я знаю, как получить все значения и на языке сервера, итерации по датам и отсутствию пробелов. Но можно ли это сделать в mysql, чтобы сортировать результат по дате и получать недостающие фрагменты.
EDIT: В этой таблице есть еще один столбец с именем UserID, поэтому у меня есть 30 000 пользователей, а некоторые из них имеют счет в этой таблице. Я удаляю даты каждый день, если дата < 30 дней назад, потому что мне нужен последний 30-дневный балл для каждого пользователя. Причина в том, что я делаю график активности пользователя за последние 30 дней и для построения графика мне нужны 30 значений, разделенных запятой. Поэтому я могу сказать, что в запросе введите мне USERID = 10203, и запрос получит мне 30 баллов, по одному за каждый из последних 30 дней. Надеюсь, теперь я более ясен.
Да, это возможно, но * почему бы вам это сделать? – NullUserException
Я все еще не понимаю. Не извлекайте ненужные данные из базы данных, если вы можете заполнить эти пробелы тем, что рисует график, и вы сэкономите некоторые издержки. – NullUserException
, но тогда я должен ВЫБРАТЬ данные для USERID, я получаю, например, 20 строк даты и оценки, а затем мне нужно зациклиться на моем языке на стороне сервера (ASP), чтобы проверить, есть ли дата 30 дней назад, если это не сделать 0 еще сделать значение базы данных ... Разве это не больше, чем выборка из значений базы данных 30 и просто построение строки? – Jerry2