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

Langage SQL Discussion :

Consolidation d'historique


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut Consolidation d'historique
    bonjour,

    j'ai ce genre de table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    champ1  | date_debut  | date_fin
    toto1     | 02/02/1998  |  04/06/2000
    toto2     | 02/02/1997  |  04/06/1997
    toto3     | 02/02/1997  |  04/06/1999
    Je souhaiterais obtenir avec une requete le resultat suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    annee  |   champ1   | 
     
    1997    |  toto2       |
    1997    |  toto3       |
     
    1998    |  toto1       |
    1998    |  toto3       |
     
    1999    |  toto1       |
    1999    |  toto3       |
     
    2000    |  toto1       |
    Je ne vois pas comment m'en sortir dans une requete SQL, auriez vous des idees ?

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    avec datepart, moi je suis sous sql server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select datepart(year,date_debut), champ1 FROM table
    order by 1,2

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Il te faut une table ANNEE (reelle ou virtuelle), avec une colonne Annee et qui conteint toutes les années possibles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Annee, Champ1, Date_Debut, Date_Fin
    FROM Annee  INNER JOIN laTable
                      ON Annee BETWEEN year(Date_Debut) AND year(Date_Fin)
    year est la fonction SQLServer qui extrait l'année d'une date.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    merci beaucoup pour les reponses, j'ai essayé ceci mais je ne suis pas satisfait du resultat.

    j'ai Table1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    champ1  | date_debut  | date_fin
    toto1     | 02/02/1998  |  04/06/2000
    toto2     | 02/02/1997  |  04/06/1997
    toto3     | 02/02/1997  |  04/06/1999
    et la table annee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    annee|debut|
    1996|01/01/1996
    1997|01/01/1997
    1998|01/01/1998
    1999|01/01/1999
    2000|01/01/2000
    j'ai essayé la requete suivante, sous Access :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT annee.annee, Champ1, date_debut, date_fin
    FROM annee  INNER JOIN Table1
                      ON annee.debut BETWEEN Table1.date_debut AND Table1.date_fin
    ce a quoi access me repond " Operateur Between sans AND dans l'expression annee.debut between Table1.date_debut"
    du coup, j'essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT annee.annee, Champ1, date_debut, date_fin
    FROM annee  INNER JOIN Table1
                      ON annee.debut> Table1.date_debut AND annee.debut<Table1.date_fin
    et j'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    annee|champ1|date_debut|date_fin|
    1999|toto1|02/02/1998|04/06/2000|
    2000|toto1|02/02/1998|04/06/2000|
    je ne m'attendais pas a ca.
    tout mes champs de date sont sous format "Date/Heure"

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    ok, pardon, la requete fonctionne en fait tres bien.

    une autre question : un index pourrait il ameliorer la rapidité d'une telle requete ?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 400
    Points
    28 400
    Par défaut
    Citation Envoyé par tatayoyo
    un index pourrait il ameliorer la rapidité d'une telle requete
    Dans l'absolu, oui ; un index peut toujours améliorer les performances d'une requête, mais il ralentit les mises à jour et les insertions.
    Après, tout dépend de ton SGBD et de la manière dont il utilise les index, l'index n'étant pas un objet reconnu dans le standard SQL.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    je suis sous Access, ou sous Mysql.
    Sur quel champ un index aiderait il dans mon cas ?

Discussions similaires

  1. [historique IExplorer]ou est il stoqué?
    Par annecyrond dans le forum IE
    Réponses: 2
    Dernier message: 21/08/2003, 16h11
  2. historique via trigger
    Par rgz dans le forum SQL
    Réponses: 6
    Dernier message: 25/06/2003, 19h12
  3. Historique de la méthode Merise
    Par Demetan dans le forum Merise
    Réponses: 4
    Dernier message: 06/06/2003, 16h46
  4. [TWebBrowser] ... et l'historique de I.E.
    Par Frederic dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/10/2002, 18h53
  5. historique d'une disquette
    Par bashou dans le forum MFC
    Réponses: 2
    Dernier message: 24/06/2002, 11h35

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