Задать вопрос

Запрос с группировкой по месяцам с 21 по 20 число

Есть таблица
show create table archive_day;
+-------------+-------------------
| Table       | Create Table
+-------------+-------------------
| archive_day | CREATE TABLE `archive_day` (
  `user_id` int(11) NOT NULL,
  `archive_date` date NOT NULL,
  `user_data` double(10,3) DEFAULT NULL,
  PRIMARY KEY (`user_id`,`archive_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Из этой таблицы необходимо выбрать сумму данных с группировкой по месяцам
SELECT 
    SUM(`user_data`) AS `udata`,
    DATE_FORMAT(`archive_date`, '%Y-%m') AS `archive_date_analyse`
FROM `archive_day`
WHERE 
    (`user_id` = '1') 
    AND
    (`archive_date` >= '2013-01-01') 
    AND 
    (`archive_date` <= '2013-04-30')
GROUP BY 
    `archive_date_analyse`
ORDER BY 
    `archive_date_analyse` ASC

Получаем так
+--------+----------------------+
| udata | archive_date_analyse |
+--------+----------------------+
| 79.671 | 2013-01 |
| 62.574 | 2013-02 |
| 52.220 | 2013-03 |
| 14.120 | 2013-04 |
+--------+----------------------+

Теперь «концепция поменялась» и дополнительно надо, чтобы группировка была с 21 по 20 число месяца. Такие периоды
2013-01-01 — 2013-01-20
2013-01-21 — 2013-02-20
2013-02-21 — 2013-03-20
2013-03-21 — 2013-04-20
2013-04-21 — 2013-04-30

Первый и последний периоды ограничатся условия в where.

Возможно ли сделать такую группировку средствами sql? Или проще выбрать все данные, а потом уже их обработать как надо?
  • Вопрос задан
  • 4550 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
@Fantyk
web developer
первое, что пришло в голову
select MONTH(archive_date)+IF( DAY(archive_date<=20),0,1) as criteria…
where #тут ограничить период
group by criteria
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы