2013-04-09 3 views
3

Я использую SQL Server 2008R2, мне нужно найти отсутствующие даты.Узнать недостающую дату

ID College Dept JoiningDate 
    1 SAEC  CSE 1/2/2008 
    2 MSEC  EEE 4/2/2008 
    3 GOV  ECE 8/2/2008 
    4 JKP  CSE 9/2/2008 
    5 VLM  CSE 10/2/2008 
    6 PTR  CSE 13/2/2008 

Выход

JoiningDate 
2/2/2008 
3/2/2008 
5/2/2008 
6/2/2008 
7/2/2008 
11/2/2008 
12/2/2008 
+3

Укажите, пожалуйста, базу данных, в которой вы используете –

+0

, вам нужно присоединиться к другой таблице со всеми датами. поэтому вы можете получить отсутствующие даты, установив null в значениях объединения. – rahularyansharma

+0

Ваш db не упоминается вами. Как только я задал аналогичный вопрос для SQL Server 2008, так что вы можете проверить это, если вы ищете только логику http://stackoverflow.com/questions/12890967/show-all-dates-data-between-two-dates-if- no-row-exists-for-specific-date-then – rahularyansharma

ответ

3

я уже предоставил вам same type question link в комментариях, если у вас все еще есть путаница, вы можете проверить это следующим образом

;with d(date) as (
    select cast('2/1/2008' as datetime) 
    union all 
    select date+1 
    from d 
    where date < '2/13/2008' 
) 

select d.date CDate 
from d 
left join CollegeDate t 
on t.JoiningDate = d.date 
WHERE ID is null 
order by d.date 

SQL FIDDLE LINK

0

Попробуйте этот сценарий, он обнаруживает отсутствующие даты без указания констант -

DECLARE @CollegeDate TABLE 
(
    College NVARCHAR(10) 
, Dept NVARCHAR(10) 
, JoiningDate DATETIME 
) 

INSERT INTO @CollegeDate (College, Dept, JoiningDate) 
VALUES 
('SAEC', 'CSE', '2/1/2008'), 
('MSEC', 'EEE', '2/4/2008'), 
('GOV', 'ECE', '2/8/2008'), 
('JKP', 'CSE', '2/9/2008'), 
('VLM', 'CSE', '2/10/2008'), 
('PTR', 'CSE', '2/13/2008') 

;WITH dateout AS 
(
SELECT 
    JoiningDate = MIN(JoiningDate) 
, MaxJoiningDate = MAX(JoiningDate) 
FROM @CollegeDate 

UNION ALL 

SELECT 
    JoiningDate + 1 
, MaxJoiningDate 
FROM dateout 
WHERE JoiningDate < MaxJoiningDate 
) 

SELECT d.JoiningDate 
FROM dateout d 
WHERE d.JoiningDate NOT IN (SELECT c.JoiningDate FROM @CollegeDate c) 
ORDER BY d.JoiningDate 
Смежные вопросы