2010-11-18 5 views
0

J'ai une table contenant une colonne de date unique dire date spéciale (stockée sous forme aaaammjj)Sql Créer une requête plage de dates avec la colonne de date unique

Comment puis-je créer une plage de dates dans le petit sous-ensemble de lignes?

table Exemple contient une colonne de date avec les valeurs suivantes 01-jan-2010, 01-feb-2010, 01-mar-2010

Je dois

01-jan-2010 - 01-feb-2010 
01-feb-2010 - 01-mar-2010 

.... .. ..

Aidez-nous s'il vous plaît.

+0

Je ne suis pas sûr de suivre ce que vous voulez. Voulez-vous dire que vous avez trois dates dans votre table d'exemple, et vous voulez une déclaration select qui renvoie quatre, avec '20100201' répété une fois? –

+0

Je pense que l'idée est que la sortie affiche la plage de dates pour un spécial où la date de fin est la date de début de la prochaine spéciale. Vous devriez envisager d'avoir deux colonnes date de début, date de fin car cela rendra la vie beaucoup plus simple et sera beaucoup plus extensible ... que se passe-t-il si vous avez deux éléments en même temps? – Rob

Répondre

2

Vous pouvez essayer quelque chose comme

DECLARE @Table TABLE(
     DateVal DATETIME 
) 

INSERT INTO @Table SELECT '01 Jan 2010' 
INSERT INTO @Table SELECT '01 Feb 2010' 
INSERT INTO @Table SELECT '01 Mar 2010' 

;WITH DateVals AS (
    SELECT *, 
      ROW_NUMBER() OVER(ORDER BY DateVal) RowID 
    FROM @Table 
) 
SELECT s.DateVal StartDate, 
     e.DateVal EndDate 
FROM DateVals s INNER JOIN 
     DateVals e ON s.RowID + 1 = e.RowID 

Sortie

StartDate     EndDate 
2010-01-01 00:00:00.000 2010-02-01 00:00:00.000 
2010-02-01 00:00:00.000 2010-03-01 00:00:00.000 

Vous pouvez éviter le CTE en utilisant

SELECT s.DateVal StartDate, 
     MIN(e.DateVal) EndDate 
FROM @Table s LEFT JOIN 
     @Table e ON s.DateVal < e.DateVal 
GROUP BY s.DateVal 
HAVING MIN(e.DateVal) IS NOT NULL 

Mais je ne vois pas pourquoi vous voulez le faire.

+0

Y a-t-il un moyen d'éviter le CTE? – SumSang

+0

CTE ne sont pas mauvais? Peut-être désolé pour une question débutant – SumSang

Questions connexes