Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2011, 11h53   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 3
Points : 3
Par défaut Tous les jours entre deux dates

Bonjour à tous !

Je galère un peu sur une requête SQL, pour commencer je ne sais même pas si elle est réalisable, mais je me lance quand même ^^.

J'ai une table 'prévision' qui est représenté comme ceci :



Ici pour faire simple je vais m'occuper que de ma table prévision .

Je voudrais mettre en place une requête qui me récupère la prévision en affichant les jours entre chaque intervalle prev_datedeb et prev_datefin c'est-à-dire comme ceci :

1;2010-12-14;2010-12-13 08:57:52;28:65000:4:5
1;2010-12-15;2010-12-13 08:57:52;28:65000:4:5
1;2010-12-16;...
1;2010-12-17;...
1;2010-12-18;...

Je n'ai donc aucune idée de comment m'y prendre, d'ailleurs comme dit plus haut je ne suis même pas sûr que ce soit réalisable.

Je remercie d'avance celle ou ceux qui peuvent me venir en aide.
karamurat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 11h57   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

Ca me semble être un simple select ce que vous demandez.

Il serai peut etre intéressant de lire un ou deux cours SQL afin de vous familiarisez avec.

Commencez par ceci :
http://sqlpro.developpez.com/cours/sqlaz/select/
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/01/2011, 12h30   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
C'est quand même un peu plus qu'un "simple" SELECT !

Il te faut une table des jours et faire une jointure externe depuis cette table pour afficher tous les jours existants entre la date de début et la date de fin.

Et si tu dois tenir compte des week-ends et jours fériés, il te faut un calendrier complet.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2011, 15h44   #4
Invité de passage
 
Inscription : juillet 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 26
Points : 3
Points : 3
Merci encore à vous deux !

Je viens de résoudre mon problème grâce à CinePhil, La doc sur la gestion du temps m'a beaucoup aidé.

j'ai créé une Procedure afin de générer le calendrier, que je l'appelle ainsi :

Code :
call make_intervals('2010-01-01 00:00:00','2035-12-31 00:00:00',1,'DAY')
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
CREATE PROCEDURE make_intervals(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10))
BEGIN
-- *************************************************************************
-- Procedure: make_intervals()
*************************************************************************
   declare thisDate timestamp;
   declare nextDate timestamp;
   SET thisDate = startdate;
 
   -- *************************************************************************
   -- Drop / create the table
*************************************************************************
   DROP TABLE IF EXISTS time_intervals;
   CREATE TABLE IF NOT EXISTS time_intervals
      (
      interval_start timestamp,
      interval_end timestamp
      );
 
   -- *************************************************************************
   --Boucle
*************************************************************************
   repeat
      SELECT
         case unitval
            when 'MICROSECOND' then timestampadd(MICROSECOND, intval, thisDate)
            when 'SECOND'      then timestampadd(SECOND, intval, thisDate)
            when 'MINUTE'      then timestampadd(MINUTE, intval, thisDate)
            when 'HOUR'        then timestampadd(HOUR, intval, thisDate)
            when 'DAY'         then timestampadd(DAY, intval, thisDate)
            when 'WEEK'        then timestampadd(WEEK, intval, thisDate)
            when 'MONTH'       then timestampadd(MONTH, intval, thisDate)
            when 'QUARTER'     then timestampadd(QUARTER, intval, thisDate)
            when 'YEAR'        then timestampadd(YEAR, intval, thisDate)
         end INTO nextDate;
 
      INSERT INTO time_intervals SELECT thisDate, timestampadd(MICROSECOND, -1, nextDate);
      SET thisDate = nextDate;
   until thisDate >= enddate
   end repeat;
 
 END;
grace à ça j'ai généré un calendrier jusqu'en 2035

que j'ai ensuite comparée par rapport à ma table prévision des prev_datedeb et prev_datefin.

'ai donc pu ressortir tous les jours entre.
Merci encore de votre aide.
karamurat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h24   #5
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Une "simple" requête récursive aurait suffit sans passer par une table intermédiaire. M'enfin un calendrier c'est toujours utile, autant y ajouter les jours ouvrés et ouvrables.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h48   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par K2R400 Voir le message
Une "simple" requête récursive
Avec MySQL ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h53   #7
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Citation:
Envoyé par CinePhil Voir le message
Avec MySQL ?
bahhhh, je croyais qu'il avait une vraie base
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h42.


 
 
 
 
Partenaires

Hébergement Web