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 basée sur le max d'un champs


Sujet :

Requêtes MySQL

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut requête basée sur le max d'un champs
    Bonjour,

    Dans un programme de gestion d'emploi du temps, j'utilise la requête suivante pour extraire le planning des gens jour par jour (ici, le 09/08/2011)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT n_fn, ts_start, ts_project, ts_quantity , ts_duration , ts_title FROM timesheet t,addressbook a WHERE t.ts_owner = a.account_id AND FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) >= '2011-08-09' AND FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) < '2011-08-10'
    ORDER By n_fn , ts_start;

    Maintenant, j'aimerais extraire chaque jour, la valeur des champs du SELECT pour ts_quantity maximum et en cas d'égalité, obtenir un résultat (pas d'importance). J'ai essayé entre autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT n_fn, ts_start, ts_project, ts_quantity , ts_duration , ts_title FROM timesheet t,addressbook a WHERE t.ts_owner = a.account_id AND FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) >= '2011-08-09' AND FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) < '2011-08-10'
    ORDER By n_fn , ts_start GROUP BY n_fn, ts_start, ts_project, ts_quantity , ts_duration , ts_title HAVING ts_quantity = MAX(ts_quantity);
    sans succès. N'étant vraiment pas un expert SQL, je tourne vers vous.

    merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    une petite description / structure des tables serai nécessaire.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    +1 pour la structure des tables. Car comme tu n'utilises pas les alias, on ne peut pas savoir dans quelles tables sont les données.

    Et deux petites remarques :
    - Dans ta seconde requête, ton order by est mal placé : Il devrait être à la fin (Mais ce n'est pas ça qui fera que ta requête va fonctionner).

    - Et je ne vois pas l’intérêt de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) >= '2011-08-09' AND FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) < '2011-08-10'
    Pourquoi ne pas faire uniquement un "=" ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) = '2011-08-09'

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Citation Envoyé par Fred_34 Voir le message
    +1 pour la structure des tables. Car comme tu n'utilises pas les alias, on ne peut pas savoir dans quelles tables sont les données.

    Et deux petites remarques :
    - Dans ta seconde requête, ton order by est mal placé : Il devrait être à la fin (Mais ce n'est pas ça qui fera que ta requête va fonctionner).

    - Et je ne vois pas l’intérêt de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) >= '2011-08-09' AND FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) < '2011-08-10'
    Pourquoi ne pas faire uniquement un "=" ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM_UNIXTIME( ts_start, '%Y%-%m-%d' ) = '2011-08-09'

    parce que je suis en test et normalement la requête porte sur une plage de jours, typiquement une semaine

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    excusez-moi, je n'avais pas pensé aux tables:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    CREATE TABLE IF NOT EXISTS `addressbook` (
      `contact_id` int(11) NOT NULL auto_increment,
      `contact_tid` varchar(1) default 'n',
      `contact_owner` bigint(20) NOT NULL,
      `contact_private` tinyint(4) default '0',
      `cat_id` varchar(255) default NULL,
      `n_family` varchar(64) default NULL,
      `n_given` varchar(64) default NULL,
      `n_middle` varchar(64) default NULL,
      `n_prefix` varchar(64) default NULL,
      `n_suffix` varchar(64) default NULL,
      `n_fn` varchar(128) default NULL,
      `account_id` int(11) default NULL,
      PRIMARY KEY  (`contact_id`),
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=103 ;
     
    CREATE TABLE IF NOT EXISTS `timesheet` (
      `ts_id` int(11) NOT NULL auto_increment,
      `ts_project` varchar(80) default NULL,
      `ts_title` varchar(80) NOT NULL,
      `ts_description` text,
      `ts_start` bigint(20) NOT NULL,
      `ts_duration` bigint(20) NOT NULL default '0',
      `ts_quantity` double NOT NULL,
      `ts_unitprice` double default NULL,
      `cat_id` int(11) default '0',
      `ts_owner` int(11) NOT NULL,
      `ts_modified` bigint(20) NOT NULL,
      `ts_modifier` int(11) NOT NULL,
      `pl_id` int(11) default '0',
      PRIMARY KEY  (`ts_id`),
      KEY timesheet_ts_project` (`ts_project`),
      KEY `timesheet_ts_owner` (`ts_owner`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19833 ;

Discussions similaires

  1. Requête basée sur divers mots d'un champ
    Par nicolas2603 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/11/2008, 16h29
  2. une liste ou requête basée sur deux fichiers
    Par chapeau_melon dans le forum WinDev
    Réponses: 8
    Dernier message: 12/11/2007, 20h00
  3. [SimpleXML] comment faire une requête basée sur un namespace d'un attribut ?
    Par hansaplast dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 03/09/2007, 01h18
  4. requête basée sur des intervalles d'heures
    Par lieselotte02 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/06/2007, 21h23
  5. une requête basée sur un seul critère ?
    Par rangernoir dans le forum Access
    Réponses: 5
    Dernier message: 07/09/2005, 18h53

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