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 :

Obtenir les donnees les plus recentes


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Obtenir les donnees les plus recentes
    Salut a tous,

    J'ai du mal a creer un requete qui me donne les dernieres caracteristiques sur mon element.

    Voici un example correspondant a mon probleme:

    Code : 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
    24
    Table VOITURE
    -------------
     
    id	|	Marque	|	Modele	|	...
    --------------------------------------------------
    0	|	Peugeot	|	308	|	...
    1	|	Peugeot	|	207	|	...
    2	|	Peugeot	|	308	|	...
    3	|	Peugeot	|	407	|	...
    4	|	Peugeot	|	308	|	...
     
     
    Table PIECES
    ------------
     
    id	|	id_voiture	|	Type		|	Date
    -----------------------------------------------------------------------
    0	|		0	|	Autoradio	|	11/05/2009
    1	|		2	|	Pneus		|	03/02/2009
    2	|		2	|	Autoradio	|	16/11/2003
    3	|		3	|	Autoradio	|	16/03/2003
    4	|		2	|	Autoradio	|	25/02/2003
    5	|		1	|	Pneus		|	22/02/2003
    6	|		4	|	Jantes		|	09/08/2000
    Donc avec cet exemple, comment obtenir les infos des 308 ayant un Autoradio + les infos de ces Autoradios (les derniers installe dessus ces voitures).

    Le resultat devrait etre du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_voiture|	Marque	|	Modele	|	Type		|	Date
    -------------------------------------------------------------------------------
    0	|	Peugeot	|	308	|	Autoradio	|	11/05/2009
    2	|	Peugeot	|	308	|	Autoradio	|	16/11/2003
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Points : 18 395
    Points
    18 395
    Par défaut
    Quel est votre SGBD et sa version ?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Quel est votre SGBD et sa version ?
    PostgreSQL 8.3

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    Ta réponse passe une petite jointure sur l'identifiant des voitures.
    Voici ce que ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT V.*, P.Type, P.Date
    FROM VOITURE V
    LEFT OUTER JOIN PIECES P ON P.id_voiture=V.id
    WHERE V.modele='308'
    AND P.Type='Autoradio'
    Tente ça, logiquement...c'est bon

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Quintouch Voir le message
    Ta réponse passe une petite jointure sur l'identifiant des voitures.
    Voici ce que ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT V.*, P.Type, P.Date
    FROM VOITURE V
    LEFT OUTER JOIN PIECES P ON P.id_voiture=V.id
    WHERE V.modele='308'
    AND P.Type='Autoradio'
    Tente ça, logiquement...c'est bon
    Merci mais j'arrive pas a adapter ta requete a ma base de donnee
    Voici ma requete actuelle (qui n'est pas bonne):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT S.fld_epc_id, S.fld_quantity, P.fld_description, P.fld_man_part_no, M.fld_manufacturer, 
           S.fld_unit_value, S.cal_total_value, C.fld_action_date, C.fld_notes
    FROM tbl_stock AS S, tbl_parts AS P, tbl_parts_manufacturers AS M 
    LEFT OUTER JOIN tbl_stock_control AS C ON C.fld_stock_id = S.fld_id
    WHERE S.fld_part_id = P.fld_id AND S.fld_epc_id = 0 AND P.fld_manufacturer_id = M.fld_id
          AND S.fld_id = C.fld_stock_id AND C.fld_action = 'Stock Check' 
    ORDER BY C.fld_notes;
    Voici l'erreur obtenue:
    ERROR: invalid reference to FROM-clause entry for table "s"
    LINE 4: ...TER JOIN tbl_stock_control AS C ON C.fld_stock_id = S.fld_id
    ^
    HINT: There is an entry for table "s", but it cannot be referenced from this part of the query.
    tbl_stock serait la table VOITURE,tbl_stock_control serait la table PIECES, '0' serait le modele de voiture et 'Stock Check' serait un type de piece.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LEFT OUTER JOIN tbl_stock_control AS C ON C.fld_stock_id
    Il te manque un truc là, tu as oublié de mettre sur quel critère tu fais ta jointure. Tu dois dire que tu joins quand l'identifiant de C est égal à l'identifiant de S. Ca te donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LEFT OUTER JOIN tbl_stock_control AS C ON C.fld_stock_id =S.fld_epc_id

  7. #7
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Quintouch Voir le message
    Il te manque un truc là, tu as oublié de mettre sur quel critère tu fais ta jointure. Tu dois dire que tu joins quand l'identifiant de C est égal à l'identifiant de S. Ca te donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LEFT OUTER JOIN tbl_stock_control AS C ON C.fld_stock_id =S.fld_epc_id
    Oui je venais juste de m'en apercevoir et ai modifie mon post quand tu a poste ta reponse.

    Ca devrait plutot etre LEFT OUTER JOIN tbl_stock_control AS C ON C.fld_stock_id =S.fld_id ?

    fld_epc_id n'est pas unique (c'est comme le modele de voiture '308')

    Mais comme tu peux le voir dans mon post precedent (edite) ca ne marche pas

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    J'ai un peu triche en utilisant MS SQL Manager sur un vieille DB et ca donne cette requete pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT                tbl_stock.fld_epc_id, tbl_stock.fld_quantity, tbl_parts.fld_description, tbl_parts.fld_man_part_no, 
                          tbl_parts_manufacturers.fld_manufacturer, tbl_stock.fld_unit_value, tbl_stock.cal_total_value, 
                          tbl_stock_control.fld_action_date,  tbl_stock_control.fld_notes
    FROM         tbl_stock INNER JOIN
                          tbl_parts ON tbl_stock.fld_part_id = tbl_parts.fld_id INNER JOIN
                          tbl_stock_control ON tbl_stock.fld_id = tbl_stock_control.fld_stock_id LEFT OUTER JOIN
                          tbl_parts_manufacturers ON tbl_parts.fld_manufacturer_id = tbl_parts_manufacturers.fld_id
    WHERE     (tbl_stock_control.fld_action = 'Stock Check') AND (tbl_stock.fld_epc_id = 0)
    ORDER BY tbl_parts.fld_description, tbl_parts.fld_man_part_no, tbl_stock_control.fld_action_date;
    Celle-ci inclu les informations qui sont NULL (en fait dans ma DB y a des enregistrement incomplets) mais ne me donne pas les plus recentes uniquement.
    Avec l'exemple des voitures ca afficherait la meme voiture avec 2 autoradios

Discussions similaires

  1. obtenir la date la plus recente
    Par chris0938 dans le forum SQL
    Réponses: 4
    Dernier message: 24/05/2010, 15h04
  2. Obtenir les donnees les plus recentes
    Par MinsK dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/06/2009, 18h55
  3. Comment selectionner les plus recents?
    Par Agent_Nivek dans le forum DB2
    Réponses: 3
    Dernier message: 31/12/2008, 16h43
  4. gridview + obtenir les donnees de la ligne
    Par ChristopheOce dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/01/2008, 15h13
  5. Importation des fichiers les plus recents
    Par avantoux dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/09/2007, 14h50

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