Requete SQL assez complexe
Fermé
Karamurat
Messages postés
43
Date d'inscription
jeudi 12 juillet 2007
Statut
Membre
Dernière intervention
4 janvier 2011
-
4 janv. 2011 à 11:55
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 - 4 janv. 2011 à 15:52
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 - 4 janv. 2011 à 15:52
A voir également:
- Requete SQL assez complexe
- Blob sql ✓ - Forum Webmastering
- Sql (+) - Forum Programmation
- Requete http - Guide
- Requete sql commence par ✓ - Forum Webmastering
- Requete sql sans doublon - Astuces et Solutions
2 réponses
Karamurat
Messages postés
43
Date d'inscription
jeudi 12 juillet 2007
Statut
Membre
Dernière intervention
4 janvier 2011
2
4 janv. 2011 à 15:52
4 janv. 2011 à 15:52
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.
scriptiz
Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
422
4 janv. 2011 à 15:50
4 janv. 2011 à 15:50
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.