Я не уверен, что эта структура данных способна сделать результат, который я хочу. http://sqlfiddle.com/#!9/84939mysql отображает каждый тип в строке и группе по дате
Это данные, пожалуйста, игнорируйте столбец продолжительности.
+----+---------------------+---------------------+---------------------+----------+--------+------+
| id | created_date | start_date | end_date | duration | status | type |
+----+---------------------+---------------------+---------------------+----------+--------+------+
| 1 | 2016-04-05 15:23:29 | 2016-08-15 10:21:53 | 2016-08-19 00:00:00 | 30 | 1 | 2 |
| 2 | 2016-04-06 15:23:29 | 2016-08-15 10:21:53 | 2016-08-19 00:00:00 | 30 | 1 | 1 |
| 3 | 2016-04-06 15:23:29 | 2016-08-15 10:21:53 | 2016-08-19 00:00:00 | 30 | 1 | 3 |
| 4 | 2016-04-06 15:23:29 | 2016-08-17 10:21:53 | 2016-08-19 00:00:00 | 30 | 1 | 1 |
| 5 | 2016-04-06 15:23:29 | 2016-08-17 09:21:53 | 2016-08-19 00:00:00 | 30 | 1 | 1 |
| 6 | 2016-04-06 15:23:29 | 2016-08-01 09:21:53 | 2016-08-31 00:00:00 | 30 | 1 | 1 |
| 7 | 2016-04-06 15:23:29 | 2016-08-01 09:21:53 | 2016-08-31 00:00:00 | 30 | 0 | 1 |
| 8 | 2016-04-06 15:23:29 | 2016-08-15 09:21:53 | 2016-08-16 00:00:00 | 30 | 1 | 2 |
| 9 | 2016-04-06 15:23:29 | 2016-08-16 09:21:53 | 2016-08-17 00:00:00 | 30 | 1 | 3 |
| 10 | 2016-04-06 15:23:29 | 2016-08-19 09:21:53 | 2016-08-20 00:00:00 | 30 | 1 | 2 |
+----+---------------------+---------------------+---------------------+----------+--------+------+
Я хочу отфильтровать отчет с 2016-08-15 до 2016-08-19. для 2015-08-19 даже 00:00:00, я не уверен, считаю счет или нет. Но для моего примера. Я просто считаю, потому что он находится в диапазоне. Это резюме сделано мной вручную: -
(type-2)15,16,17,18,19
(type-1)15,16,17,18,19
(type-3)15,16,17,18,19
(type-1)17,18,19
(type-1)17,18,19
(type-1)15,16,17,18,19
(type-1)15,16,17,18,19
(type-2)15,16
(type-3)16,17
(type-2)19,20
Это результат я хотел бы генерировать в данных SQL возвращения.
+------------+--------+-----------+-----------+-----------+
| date | ct_all | ct_type_1 | ct_type_2 | ct_type_3 |
+------------+--------+-----------+-----------+-----------+
| 2016-08-15 | 6 | 3 | 2 | 1 |
| 2016-08-16 | 7 | 3 | 2 | 2 |
| 2016-08-17 | 8 | 5 | 1 | 2 |
| 2016-08-18 | 7 | 5 | 1 | 1 |
| 2016-08-19 | 8 | 5 | 2 | 1 |
+------------+--------+-----------+-----------+-----------+
ct_all = посчитать все
ct_type_1 = Count общей для 1-го типа
до тех пор, как тип попадают в датой_начала и end_date тогда он будет рассчитывать. Обычно мы выполнили поиск по дате базы на один тип столбца, например created_date. и я могу использовать между> = и < =, чтобы найти диапазон. Но у этого была дата начала и окончания. Не уверен, что это возможно или нет.
У вас должна быть таблица со всеми существующими датами (см., Например, [Таблицы календаря: Бесценный инструмент базы данных] (http://www.brianshowalter.com/calendar_tables)). Соедините это с вашими данными о '> = start_date' и' <= end_date'. Это можно просто подсчитать. – Solarflare