2017-02-14 3 views
0

Вот логика вычисления, которую я пытаюсь сделать: мне нужно рассчитать членов, которые постоянно участвуют в членстве. Например, членство в США закончилось 1-1-2017, но он присоединился к нему еще до 2-15-2017, затем он считается членом-правомочным, но если он присоединится к более чем 45 дням, он не имеет права на членство. Я попытался использовать функцию ранжирования, а также попытался использовать функцию DATEDIFF, похоже, не работает.SQL Server - вычисление непрерывного членства

Может ли кто-нибудь помочь в этом? Заранее спасибо.

| ID | NAME | TERMINATIONDATE | STARTDATE | 
|------------------------------------------| 
| 2 | John | 1-1-2017  | 2-16-2017 | 
| 3 | Harry | 12-1-2016  | 1-1-2016 | 
| 4 | Rob | active   | 1-1-2015 | 

Так мне нужен кол-идентификаторы, которые не прекращаются, и если они будут завершены, и начали с 45 дней после ее окончания, считать это тоже, как соответствующими членами.

+1

выборки данных и желаемые результаты были бы полезно и исключить предположения –

+0

извините за это: – axlrose89

+0

добавил образцы данных, но пришел в одну строку. – axlrose89

ответ

0

Вы можете просто использовать DATEADD функцию для сравнения даты начала до даты окончания:

select 
count(*) 
from members 
where isnull(termination_date,'') = '' 
or dateadd(d,45,termination_date) > start_date 

Одна вещь, которую я заметил, в вашем примере данных является то, что значение «активный» в колонке даты завершения , Если это так, как ваши данные, я бы рекомендовал не делать этого и вместо этого использовать значение NULL для всех членов, у которых нет даты окончания.

Отредактировано: Если дата окончания фактически «stringly типизированный», вы можете использовать следующий запрос, чтобы вычистить из «активного» значения:

select 
count(*) 
from members 
where termination_date = 'active' 
or dateadd(d,45, replace(termination_date,'active','')) > start_date 
+0

Очень ценный Эх ... – axlrose89

Смежные вопросы