отображать недели между датами - PullRequest
2 голосов
/ 16 января 2012

Я использую следующий запрос для получения еженедельной суммы часов, потраченных на проект

SELECT SUM( hours ) AS total, 
CONCAT( spent_on,  ' - ', spent_on + INTERVAL 6 DAY ) AS weeky
FROM time_entries
WHERE project_id =1
GROUP BY WEEK( spent_on )

мой текущий выходной сигнал

20  2011-04-28 - 2011-05-04
18  2011-06-11 - 2011-06-17
17  2011-06-13 - 2011-06-19
26  2011-06-20 - 2011-06-26

но я также хочу отобразить те недели, которые не указаны во времени.

Т.е. я хочу отобразить все недели от заданной даты до даты.

ожидаемый результат -

20  2011-04-28 - 2011-05-04
0       2011-05-05 - 2011-05-11
0       2011-05-12 - 2011-05-18
.
.
.
18  2011-06-11 - 2011-06-17
17  2011-06-13 - 2011-06-19
26  2011-06-20 - 2011-06-26

или, если не даты, должны отображаться неделя 1, неделя 2, неделя 3 .. неделя n

даже те недели, когда в таблице нет записи о работе

1 Ответ

1 голос
/ 16 января 2012

Тогда вам нужна таблица соответствия. Один с датой начала каждой недели, которая вас интересует. С помощью этой таблицы вы можете СЛЕДУЕТ ПОДКЛЮЧИТЬ свои данные и приступить к работе:)

SELECT
  SUM( time_entries.hours ) AS total, 
  CONCAT( calendar.first_date,  ' - ', calendar.last_day ) AS weekly
FROM
  calendar
LEFT JOIN
  time_entries
    ON  calendar.first_day <= time_entries.spent_on
    AND calendar.last_day  >= time_entries.spent_on
    AND time_entries.project_id =1
GROUP BY
  calendar.first_day

Несмотря на то, что эта справочная таблица, я чувствую себя немного неопрятно, она почти не использует места, не занимает много времени для создания и заполнения и фактически является кешем (использование дискового пространства для экономии времени процессора и сложности запросов) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...