Requete SQL assez complexe
Karamurat
Messages postés
45
Statut
Membre
-
Karamurat Messages postés 45 Statut Membre -
Karamurat Messages postés 45 Statut Membre -
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 :
http://img821.imageshack.us/img821/719/phpmyadmine.jpg
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.
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 :
http://img821.imageshack.us/img821/719/phpmyadmine.jpg
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.
A voir également:
- Requete SQL assez complexe
- Logiciel sql - Télécharger - Bases de données
- Racine complexe pci express ✓ - Forum Pilotes (drivers)
- Tableau complexe word - Guide
- Ce texte est composé de plusieurs lignes. ce qui le rend assez long. il doit être copié pour être collé dans la zone 2. - Forum Incredimail
- Vous n'avez pas fourni assez d'informations pour que google - Guide
2 réponses
Je viens de résoudre mon problème grâce à la doc sur la gestion du temps :https://sqlpro.developpez.com/cours/gestiontemps/ qui m'a beaucoup aidé.
j'ai créé une Procedure afin de générer le calendrier, que je l'appelle ainsi :
grace à ça j'ai généré un calendrier jusqu'en 2035 :mouarf:
que j'ai ensuite comparée par rapport à ma table prévision des prev_datedeb et prev_datefin.
j'ai donc pu ressortir tous les jours entre.
j'ai créé une Procedure afin de générer le calendrier, que je l'appelle ainsi :
call make_intervals('2010-01-01 00:00:00','2035-12-31 00:00:00',1,'DAY')
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 :mouarf:
que j'ai ensuite comparée par rapport à ma table prévision des prev_datedeb et prev_datefin.
j'ai donc pu ressortir tous les jours entre.
Il me semble que pour ça tu ne va pas pouvoir tout faire tenir en une seule requête SQL.
L'idéal serait d'utiliser par exemple une fonction en PL(PG)/SQL (selon ton SGDB) qui retournerait un SETOF RECORDS que tu créerait toi même en ajoutant à chaque fois une interval de 1 après la date de départ et ceci jusqu'à la date de fin.
Sinon tu peux aussi via ta couche logicielle (imaginons que ce soit en Java ou en PHP) faire ce traitement et réaliser un affichage adéquat.
Bonne chance.
L'idéal serait d'utiliser par exemple une fonction en PL(PG)/SQL (selon ton SGDB) qui retournerait un SETOF RECORDS que tu créerait toi même en ajoutant à chaque fois une interval de 1 après la date de départ et ceci jusqu'à la date de fin.
Sinon tu peux aussi via ta couche logicielle (imaginons que ce soit en Java ou en PHP) faire ce traitement et réaliser un affichage adéquat.
Bonne chance.