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
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Vous ne pouvez pas récupérer votre compte pour le moment, car google n'a pas assez d'informations pour s'assurer que ce compte vous appartient. - 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 Bureautique
- Je ne trouve plus le mot de passe de mon compte google - Forum Gmail
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
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
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.