У меня есть набор данных сSQL Person по месяцам Данные
Name|ID|Start_DATE|END_DATE
Я хотел бы получить перерыв из активных месяцев.
Пример:
Bob Smith|1001|2016-12-01|2017-02-18
бы вернуть все месяцы, перечисленные между датами
Bob Smith|1001|2016-12-01
Bob Smith|1001|2017-01-01
Bob Smith|1001|2017-02-02
Я строгания с некоторыми данными, основанными на даты, которые я нашел. Мне также придется иметь дело с активными сотрудниками, указанными как 9999-12-31
, когда я выясню базовый запрос.
declare @startDate date;
declare @endDate date;
select @startDate = '20100101';
select @endDate = '20150531';
with dateRange as
(
select dt = dateadd(mm, 0, @startDate)
where dateadd(mm, 0, @startDate) < @endDate
union all
select dateadd(mm, 1, dt)
from dateRange
where dateadd(mm, 1, dt) < @endDate
)
select *
from dateRange
Есть ли лучший способ справиться с этим?
Это вопрос MySql. Пожалуйста, отметьте его соответствующим образом. Это привлечет более конкретную помощь к вашему вопросу. –
Нет, MS SQL была целевой аудиторией –
Вы спрашиваете, есть ли лучший способ генерации dateRange? –