TSQL Выбор 2-х и 3-х недельных интервалов - PullRequest
1 голос
/ 15 января 2010

Я пытаюсь заполнить таблицу с интервалом в 2 и 3 недели для полугодового периода оплаты в TSQL. Таблица должна заполниться,

2 week date
2 week date
3 week date
2 week date
2 week date
3 week date

.. на основании первой поставленной мною даты, с последующим добавлением 2 или 3 недель к последней поставленной дате. Я должен быть в состоянии предоставить дату начала и дату окончания. Может быть, это просто рано утром, но не может придумать элегантный способ выполнить эту задачу. Есть указатели?

Спасибо! George

Ответы [ 3 ]

3 голосов
/ 15 января 2010
WITH    dates (d, n) AS
        (
        SELECT  @mydate, 1
        UNION ALL
        SELECT  DATEADD(week, CASE n % 3 WHEN 0 THEN 3 ELSE 2 END, d), n + 1
        FROM    dates
        WHERE   d < @enddate
        )
INSERT
INTO    mytable
SELECT  d
FROM    dates
OPTION  (MAXRECURSION 0)
1 голос
/ 15 января 2010

Ужасный подход грубой силы - потому что 2,2,3 сложно зациклить, просто добавив его независимо от временной таблицы, а затем отфильтровав в конце, добавим пару дополнительных записей - не самый эффективный, но если вам нужно просто получить диапазон один, тогда это работает.

Итак, предостережение: хорошо, я бы не стал использовать в производстве :) 1003 *

declare @start datetime
declare @end datetime
declare @calculated datetime

set @start = '20010101'
set @end = '20011231'

set @calculated = @start

Create Table #Dates (PayDate datetime)

while @calculated <= @end
begin
    set @calculated = DateAdd(wk,2,@calculated)
    insert into #Dates(paydate) values (@calculated)
    set @calculated = DateAdd(wk,2,@calculated)
    insert into #Dates(paydate) values (@calculated)
    set @calculated = DateAdd(wk,3,@calculated)
    insert into #Dates(paydate) values (@calculated)
end
select * from #Dates where paydate >= @start and paydate <= @end
drop table #dates
0 голосов
/ 15 января 2010

Итак, у вас есть 7-недельный цикл - определите, в каком 7-недельном периоде вы находитесь с некоторой известной начальной точкой, а затем на какой неделе вы в этой группе из 7 человек.

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