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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    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 émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    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
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    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 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    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.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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