IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

entrepôt de donnée- Table des temps


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 225
    Points : 96
    Points
    96
    Par défaut entrepôt de donnée- Table des temps
    Bonjour,

    Je souhaiterai implanter une table "temps" contenant les informations suivantes : annee,mois,jour,jour ouvrables(flag),saison etc..
    J'aimerai inserer 5 année dans cette table, mais je ne sais pas comment faire,quelqu'un aurait-il un script sql réalisant cela?ou une table de temps toute faite?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    La base de toutes les tables de référence ordonnée, c'est la table des chiffres :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE chiffres (
      Num tinyint(1) UNSIGNED NOT NULL
    ) ;
    INSERT INTO chiffres VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9) ;
    Ensuite, il n'y a plus qu'à l'exploiter par un produit cartésien :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    -- création de la table Calendrier
    Create table Calendrier(
    	datejour DATE NOT NULL PRIMARY KEY,
    	annee YEAR(4),
    	mois TINYINT,
    	jour TINYINT,
    	ouvrable BOOLEAN DEFAULT 1,
    	saison ENUM('hiver', 'printemps', 'été', 'automne')
    ) ;
     
    -- date de début
    set @deb = '2008-01-01' ;
     
    -- création des lignes 
    insert into Calendrier(datejour)
    select date_add(@deb, INTERVAL M.num * 1000 + C.num * 100 + D.num * 10 + U.num DAY)
    from chiffres M
      cross join chiffres C
    	cross join chiffres D
    	cross join chiffres U
    where date_add(@deb, INTERVAL M.num * 1000 + C.num * 100 + D.num * 10 + U.num DAY) < date_add(@deb, INTERVAL 5 YEAR)
    order by M.num * 1000 + C.num * 100 + D.num * 10 + U.num ;
    Maintenant, il n'y a plus qu'à renseigner les autres colonnes à partir de datejour :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    -- années, mois et jours
    UPDATE Calendrier
    SET annee = year(datejour), mois = month(datejour), jour = dayofmonth(datejour) ;
     
    -- week-ends et jours fériés
    update calendrier
    set ouvrable = 0 
    where weekday(datejour) in (5, 6) 
      or date_format(datejour, '%m-%d') IN ('07-14','12-31', '11-11') -- à compléter ;
     
    -- saison
    update calendrier 
    set saison = CASE 
      WHEN date_format(datejour, '%m-%d') BETWEEN '03-21' AND '06-20' THEN 'printemps'
    	WHEN date_format(datejour, '%m-%d') BETWEEN '06-21' AND '09-20' THEN 'été'
    	WHEN date_format(datejour, '%m-%d') BETWEEN '09-21' AND '12-20' THEN 'automne'
    	ELSE 'hiver'
      END ;
    Pour les finitions :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    alter table calendrier modify annee YEAR(4) not null ;
    alter table calendrier modify mois TINYINT not null ;
    alter table calendrier modify jour TINYINT not null ;
    alter table calendrier modify ouvrable BOOLEAN not null DEFAULT 1 ;
    alter table calendrier modify saison ENUM('hiver', 'printemps', 'été', 'automne')  not null ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 225
    Points : 96
    Points
    96
    Par défaut merci
    Merci beaucoup antoun !
    Ta réponse m'a beaucoup aidé!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Entrepôt de données pour des enseignants
    Par la joziane dans le forum Schéma
    Réponses: 14
    Dernier message: 03/01/2007, 16h55
  2. insertion des données ds des tables
    Par taroudant dans le forum Oracle
    Réponses: 2
    Dernier message: 18/12/2006, 10h59
  3. [VB.Net] Comment insérer des données dans des tables ?
    Par shakoulé dans le forum Accès aux données
    Réponses: 2
    Dernier message: 23/09/2006, 21h46
  4. Débutant:accès a la table des données
    Par izeba dans le forum Access
    Réponses: 1
    Dernier message: 17/08/2006, 17h34
  5. Récupérer ma base de donnée avec des tables en .frm uniqueme
    Par Michas dans le forum Administration
    Réponses: 5
    Dernier message: 31/08/2005, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo