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 :

Requête : dernière opération


Sujet :

Requêtes MySQL

  1. #1
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut Requête : dernière opération
    Bonjour,

    Je me permets de demander votre aide pour une requête que je n'arrive pas à écrire. Chose importante : je travaille avec MySQL 3.23.52, donc pas de sous-requête

    Voici une version simplifiée de ma table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE OperationTache (
      id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      tache INTEGER UNSIGNED NOT NULL,
      date DATE NULL,
      typeOper SMALLINT UNSIGNED NULL,
    );
    Je voudrais obtenir l'ID de la dernière opération de type 3 concernant la tache x.

    Si quelqu'un pouvait compléter ma requête (avec quelques explications si nécessaire ^^), je lui en serai très reconnaissant.

    Voici où je bloque...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id
    FROM OperationTache
    WHERE typeOper = 3
    AND tache = x
    AND ....... (date plus ancienne)
    Merci d'avance et bonne journée 8)

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Par défaut
    order by date asc

    et ensuite tu selectionne ton premier record

  3. #3
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Je viens de remarquer qu'en voulant simplifier trop le problème, j'ai finalement posé une question inadéquate. Vraiment désolé

    Voici ma table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE OperationTache (
      id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      tache INTEGER UNSIGNED NOT NULL,
      acteur INTEGER UNSIGNED NOT NULL,
      date DATE NULL,
      typeOper SMALLINT UNSIGNED NULL,
    );
    Et ce que je cherche :

    La liste des tâches dont l'acteur de la dernière opération de type 0 ou 1, est un entier donné.

    En SQL incomplet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT tache
    FROM OperationTache
    WHERE acteur = x
    AND typeOperation = 0
    OR typeOperation = 1
    Ce qui me donne (si je n'ai pas fait d'erreur) la liste des tâches dont les opérations de type 0 et 1 sur cette tâche ont été réalisées par x. Et ce que je n'arrive pas à exprimer, c'est que "seulement la dernière tâche a été réalisée par cet acteur".

    Peut-être en utilisant "LIMIT" aussi mais je ne vois pas comment.

    Encore merci et désolé pour cette erreur dans mon premier message

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Par défaut
    je maintient ma reponse:

    order by date ASC te retournera tout les gens ayant fait la tache X de type 1 ou 0 et le order te permet de trier ds lordre des dates. Tu pourrait isole le premier enregistrement avec un limite 0,1 si tu le desire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tache 
    FROM OperationTache 
    WHERE acteur = x 
    AND typeOperation = 0 
    OR typeOperation = 1 
    ORDER BY date ASC 
    LIMIT 0,1
    OK?

  5. #5
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Citation Envoyé par writeln
    je maintient ma reponse:

    order by date ASC te retournera tout les gens ayant fait la tache X de type 1 ou 0 et le order te permet de trier ds lordre des dates. Tu pourrait isole le premier enregistrement avec un limite 0,1 si tu le desire.

    OK?
    Merci pour ton aide mais malheureusement non, ce n'est pas OK.
    Je pense que tu confonds car il ne me faut pas la liste des gens ayant fait la tâche X, mais la liste des tâches qui ont été faites par l'acteur X. C'est de ma faute car dans mon premier message x se rapportait à une tâche et maintenant à un acteur. Désolé

    La requête que tu me proposes renvoie une tâche qui correspond à une opération de type 0 ou 1 réalisée par l'acteur X, et dont la date d'opération est la moins récente de toutes les opérations.

    Voici ce que je cherche à exprimer sans sous requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT tache
    FROM  OperationTache 
    WHERE acteur = 2 
    AND ( typeOper = 0 OR typeOper = 1 )
    AND date = (SELECT MAX(date) FROM OperationTache where typeOper = 0 or typeOper = 1)

  6. #6
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    J'ai finalement réussi à m'en sortir.

    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
    CREATE TEMPORARY TABLE tmp (
            tache INTEGER UNSIGNED NOT NULL,
            id INTEGER UNSIGNED NOT NULL);
     
    LOCK TABLES `OperationTache` READ;
     
    INSERT INTO tmp
      SELECT tache, max( id ) 
      FROM  `OperationTache` 
      WHERE typeOper = 0 OR typeOper = 1
      GROUP  BY tache;
     
    SELECT `OperationTache`.tache FROM `OperationTache`, tmp
    WHERE `OperationTache`.id = tmp.id 
    AND acteur = 2;
     
    UNLOCK TABLES;
     
    DROP TABLE tmp;

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

Discussions similaires

  1. Pb requête dernière date avec jointure
    Par cedric70 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/05/2011, 16h56
  2. Composant Annuler dernière opération
    Par Mickey974 dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2009, 14h02
  3. Requête SQL : Opérations DATE_ADD compliquées
    Par Havran dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/06/2009, 14h00
  4. [Requête] L'opération "compte" dans une requete
    Par NiKoTiNe dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/05/2007, 08h56
  5. Réponses: 1
    Dernier message: 08/02/2006, 17h17

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