Предположим, что таблица #weekly_calendar
содержит ваши действительные рабочие недели (т. е. на декабрь 2015 г.). Кстати, синтаксис для MSSQL. Вы должны указать, какую базу данных вы используете.
Вы также можете динамически создавать календарь во время выполнения. Это просто для того, чтобы показать концепцию в простой для понимания форме.
-- week start dates
-- 2015-12-01
-- 2015-12-07
-- 2015-12-14
-- 2015-12-21
-- 2015-12-28
create table #weekly_calendar (
week_start_date datetime,
week_end_date datetime
)
Предположим, что #report_date
содержит дату отчета сотрудника.
-- report dates
-- 2015-12-02
-- 2015-12-15
-- 2015-12-29
create table #report_date (
report_date datetime
)
Вот как вы отображаете незарегистрированные даты.
select * from #weekly_calendar w
left join #report_date r
on r.report_date between w.week_start_date and w.week_end_date
Если у вас нет week_end_date. Опять же, если ваши рабочие дни начинаются с понедельника по пятницу.
select * from #weekly_calendar w
left join #report_date r
on r.report_date between w.week_start_date and DATEADD(dd, 6-(DATEPART(dw, w.week_end_date)), w.week_end_date)
person
duduwe
schedule
10.02.2016
LEFT JOIN
tallytable в исходную таблицу. - person HoneyBadger   schedule 10.02.2016