SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.07.2009 16:10:00

McRain
Участник
Зарегистрирован: 08.07.2009
Сообщений: 1

Счетчик на каждую дату в диапазоне.

Добрый день.
Есть таблица с (допустим) двумя полями - numid (integer) и dates (Date).
Необходимо получить список формата COUNT(numid), DAY(dates) попадающий в заданый произвольный промежуток дат (WHERE dates>= startdate AND dates <= enddate) но включающий в себя даже те даты, которых нет в таблице (пусть со значением 0).
То есть в таблице есть данные за 1, 4, 5, и 12 мая и 1, 7, 8, 9, 15 июня. Задается диапазон с 4 мая по 8 июня. Результат запроса должен включать в себя все дни в этом диапазоне , включительно дней, которых нет в таблице (пусть там стоит 0).
Большое спасибо.

Неактивен

 

#2 09.07.2009 14:58:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Счетчик на каждую дату в диапазоне.

Боюсь, что наивно это никак не сделаешь. Самый простой способ, кажется, —
заполнить вспомогательную табличку нужными значениями дат, и уже с ней
объединяться.

Я бы заполнял как-то так (естественно, в нужных местах нужно поставить INSERT):

[aquatica] root (none) > select @a := 0;
+---------+
| @a := 0 |
+---------+
|       0 |
+---------+
1 row in set (0,00 sec)

[aquatica] root (none) > select current_date() + interval @a day, @a := @a + 1;
+----------------------------------+--------------+
| current_date() + interval @a day | @a := @a + 1 |
+----------------------------------+--------------+
| 2009-07-09                       |            1 |
+----------------------------------+--------------+
1 row in set (0,00 sec)

[aquatica] root (none) > select current_date() + interval @a day, @a := @a + 1;
+----------------------------------+--------------+
| current_date() + interval @a day | @a := @a + 1 |
+----------------------------------+--------------+
| 2009-07-10                       |            2 |
+----------------------------------+--------------+
1 row in set (0,00 sec)

[aquatica] root (none) > select current_date() + interval @a day, @a := @a + 1;
+----------------------------------+--------------+
| current_date() + interval @a day | @a := @a + 1 |
+----------------------------------+--------------+
| 2009-07-11                       |            3 |
+----------------------------------+--------------+
1 row in set (0,00 sec)

[aquatica] root (none) > select current_date() + interval @a day, @a := @a + 1;
+----------------------------------+--------------+
| current_date() + interval @a day | @a := @a + 1 |
+----------------------------------+--------------+
| 2009-07-12                       |            4 |
+----------------------------------+--------------+
1 row in set (0,00 sec)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson