2012-01-23 5 views
0

J'ai une tablerequête SELECT dans SQL Server

ID | DATE 
1 | 16-01-2012 
2 | 17-01-2012 
3 | 18-01-2012 
4 | 22-01-2012 
5 | 28-01-2012 
6 | 02-02-2012 

Ma tâche est la suivante:

je une variable date qui est initialisée à 16-01-2012 et je dois trouver toutes les lignes qui sont en continuité avec 16-01-2012 c'est-à-dire 17-01-2012 et 18-01-2012.

Aidez-nous s'il vous plaît.

Répondre

6

Une possibilité serait d'utiliser un hierarchical query comme ce qui suit:

with data (id, date) 
as 
(
    select id, date from yourtable where date = '16-01-2012' 
    UNION ALL 
    select t.id, t.date 
    from yourtable t 
    inner join data d 
     on DATEDIFF(dd, d.date, t.date) = 1 
    -- 1 day difference 
) 
select 
    * 
from 
    data 
; 

Je ne dispose pas d'un serveur SQL ici pour essayer, donc il pourrait y avoir quelques erreurs dans la déclaration. Cela devrait vous donner une idée.

+2

sur DATEDIFF (dd, t.Date, d.Date) = -1 –

+0

@AdrianIftode: Merci. La soustraction simple ne fonctionne-t-elle pas dans le serveur SQL? –

+0

Non. Votre code a bien fonctionné, mais pas la soustraction. –

-1

Essayez ceci:

select id, date 
from table 
where date > date_from_variable 

La seule chose que vous avez à faire jet, est de jeter votre variable au format de date droite.

échantillon:

cast(date_from_variable, smalldate) 
+0

-1: Ceci retourne tous les éléments qui sont plus grands que la variable spécifiée, qu'il y ait ou non un intervalle entre les deux. –