Суммирующее значение MySQL по диапазону дат

У меня есть таблица, каждая строка которой содержит дату и некоторое произвольное числовое значение. Мне нужно суммировать это значение для определенного, но динамического интервала дат.

SELECT VERSION();
5.0.51a-24+lenny5

CREATE TABLE IF NOT EXISTS `work_entries` (
  `entry_id` int(10) unsigned NOT NULL auto_increment,
  `employee_id` tinyint(3) unsigned NOT NULL,
  `work_date` date NOT NULL,
  `hour_count` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`entry_id`)
);

INSERT INTO `work_entries` (`entry_id`, `employee_id`, `work_date`, `hour_count`) VALUES
(1, 1, '2011-04-25', 2),
(2, 1, '2011-04-26', 3),
(3, 1, '2011-04-27', 1),
(4, 2, '2011-04-25', 2),
(5, 2, '2011-04-27', 4),
(6, 1, '2011-05-08', 2),
(7, 2, '2011-05-06', 8),
(8, 2, '2011-05-08', 9),
(9, 2, '2011-05-09', 1),
(10, 1, '2011-05-29', 3),
(11, 1, '2011-05-30', 1),
(12, 2, '2011-05-30', 2),
(13, 1, '2011-06-02', 2),
(14, 1, '2011-06-04', 3),
(15, 1, '2011-06-14', 1),
(16, 2, '2011-06-14', 2),
(17, 2, '2011-06-17', 4),
(18, 1, '2011-06-18', 2),
(19, 2, '2011-06-19', 8),
(20, 2, '2011-06-26', 9),
(21, 2, '2011-07-01', 1),
(22, 1, '2011-07-03', 3),
(23, 1, '2011-07-03', 1),
(24, 2, '2011-07-16', 2);

Следующий запрос возвращает правильный результат для указанного выше набора данных и должен проиллюстрировать, что я пытаюсь сделать, однако мне нужно сгенерировать год и месяц значения основаны на work_date . Дни (16, 15) никогда не меняются. В частности, этот запрос создаст две строки, одну для указанного интервала, а другую для остальных, где мне нужна одна строка для каждого периода (с 16-го числа N до 15-го месяца N + 1 для всех месяцев со значениями).

SELECT
 SUM(hour_count) AS res
 FROM `work_entries`
 GROUP BY work_date
 BETWEEN '2011-04-16' AND '2011-05-15';

-- Outputs
res
----
44
32

-- Should give
res
----
32
14
28
 2

Альтернативный пример, который работает правильно, но с неправильным интервалом (дни 01-31):

SELECT
 SUM(hour_count) AS res
 FROM `work_entries`
 GROUP BY MONTH(work_date);

-- Outputs
res
---
12
26
31
 7

Кроме того, если есть способ вывести дату и дату одновременно, я бы тоже хотел этого, но это не очень важно.

5
задан mkjeldsen 19 April 2011 в 15:44
поделиться