3 votes

Trouver la date manquante

J'utilise SQL Server 2008R2, j'ai besoin de trouver les dates manquantes.

 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

Sortie

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

3voto

rahularyansharma Points 4156

Je vous ai déjà fourni lien vers le même type de question dans les commentaires, si vous avez encore de la confusion vous pouvez vérifier ceci comme suit

;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

LIEN VERS LE LOGICIEL DE MANIPULATION SQL

0voto

Devart Points 52715

Essayez ce script, il trouve les dates manquantes sans spécifier de constantes -.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X