2010-11-13 3 views
4

J'ai requête qui va comme ça:Comment sélectionner des dates consécutives?

SELECT DISTINCT 
     S.date1 AS date1, 
     S.date2 AS date2, 
     S.period AS period 

FROM portfolio.scenario S 

WHERE S.date1 >= '2010-06-01' AND 
     S.date2 <= '2010-07-01' AND 
     S.period = 'WEEK' 

La sortie est:

"2010-06-01 00:00:00","2010-06-08 00:00:00",WEEK 
"2010-06-02 00:00:00","2010-06-09 00:00:00",WEEK 
"2010-06-03 00:00:00","2010-06-10 00:00:00",WEEK 
"2010-06-04 00:00:00","2010-06-11 00:00:00",WEEK 
"2010-06-07 00:00:00","2010-06-14 00:00:00",WEEK 
"2010-06-08 00:00:00","2010-06-15 00:00:00",WEEK 
"2010-06-09 00:00:00","2010-06-16 00:00:00",WEEK 
"2010-06-10 00:00:00","2010-06-17 00:00:00",WEEK 
"2010-06-11 00:00:00","2010-06-18 00:00:00",WEEK 
"2010-06-14 00:00:00","2010-06-21 00:00:00",WEEK 
"2010-06-15 00:00:00","2010-06-22 00:00:00",WEEK 
"2010-06-16 00:00:00","2010-06-23 00:00:00",WEEK 
"2010-06-17 00:00:00","2010-06-24 00:00:00",WEEK 
"2010-06-18 00:00:00","2010-06-25 00:00:00",WEEK 
"2010-06-21 00:00:00","2010-06-28 00:00:00",WEEK 
"2010-06-22 00:00:00","2010-06-29 00:00:00",WEEK 
"2010-06-23 00:00:00","2010-06-30 00:00:00",WEEK 
"2010-06-24 00:00:00","2010-07-01 00:00:00",WEEK 

Ce que je dois ne sont que les dates consécutives Startest avec plus tôt date1;

"2010-06-01 00:00:00","2010-06-08 00:00:00",WEEK 
    "2010-06-08 00:00:00","2010-06-15 00:00:00",WEEK 
    "2010-06-15 00:00:00","2010-06-22 00:00:00",WEEK 
    "2010-06-22 00:00:00","2010-06-29 00:00:00",WEEK 

apprécierais toute aide sur le sujet :)

Répondre

4

Ce n'est pas optimale pour des performances à utiliser des clauses fonctionnelles, mais cela fera l'affaire tant que le S.period reste à une semaine.

SELECT DISTINCT 
     S.date1 AS date1, 
     S.date2 AS date2, 
     S.period AS period 

FROM portfolio.scenario S 

WHERE S.date1 >= '2010-06-01' AND 
     S.date2 <= '2010-07-01' AND 
     S.period = 'WEEK' AND 
     DAYOFWEEK(S.date1) = DAYOFWEEK('2010-06-01'); 
+0

C'était rapide. Merci andy, cela a fonctionné :) – 3ashmawy

+0

Vous avez une idée, comment une solution générale serait (ne pas dépendre de la valeur de S.period)? – 3ashmawy

0

EDIT Désolé, je ne regarde pas le résultat souhaité assez proche. Cette JOIN va trier les dates qui n'ont pas de fin et qui commencent le même jour.

Vous devez traverser rejoindre la table comme ceci:

SELECT DISTINCT 
     S.date1 AS date1, 
     S.date2 AS date2, 
     S.period AS period 

    FROM portfolio.scenario S, 
     portfolio.scenario T 

WHERE S.date1 >= '2010-06-01' AND 
     S.date2 <= '2010-07-01' AND 
     S.period = 'WEEK' AND 
    (T.date2 = S.date1 OR 
     S.date1 = '2010-06-01') 

La dernière condition doit OU inclure la première ligne car il ne peut être rejoint par T.date2 = S.date1.

C'est parti.

+0

cela ne fonctionne pas, il suffit de continuer à courir, puis "Perdu la connexion avec le serveur" – 3ashmawy

+0

Impossible de dire à partir de ce que vous avez fourni à propos de votre installation. L'exécutez-vous à partir d'un langage de script ou directement sur la base de données? – aefxx

Questions connexes