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 :

Formule SQL pour date la plus récente [MySQL-5.6]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 110
    Par défaut Formule SQL pour date la plus récente
    Bonjour à tous,

    je suis débutant sur SQL et je cherche à faire une requete qui me permet d'extraire pour un Code donné la date et heure de création la plus récente (donc supprimé les doublons et n'avoir qu'une ligne avec la date la plus récente)

    pour le fichier en pj , je souhaite n'avoir qu'à alors par exemple :

    colonne A Colonne B Date et heure de création
    AZERTY FRANCE 11/03/2016 18h59:22
    AZSDFGH sdfg 05/02/2016 14h11:41

    Je vous remercie d'avance pour votre retour

    pierre031
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM nom_table ORDER BY CREATEDDATETIME DESC LIMIT 1;
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(CREATEDDATETIME) FROM nom_table;
    ?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par fd_caramba Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM nom_table ORDER BY CREATEDDATETIME DESC LIMIT 1;
    Cette solution est à éviter : "LIMIT" n'est pas du SQL standard et ça nécessite un tri, donc un coût supplémentaire inutile

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut pierre031.

    Voici un exemple :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`      integer unsigned  NOT NULL AUTO_INCREMENT primary key,
      `col1`    varchar(255)      NOT NULL,
      `col2`    varchar(255)      NOT NULL,
      `datime`  datetime          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`col1`,`col2`,`datime`) VALUES
    ('AZERTY',  'France',     '2016/03/11 18:59'),
    ('AZERTY',  'Belgique',   '2015/11/06 16:11'),
    ('AZERTY',  'Suisse',     '2015/12/18 16:10'),
    ('AZERTY',  'xxx',        '2016/02/09 11:30'),
    ('AZERTY',  'zer',        '2016/02/09 16:21'),
    ('AZERTY',  'er',         '2015/11/24 15:24'),
    ('AZERTY',  'df',         '2016/01/06 14:38'),
    ('AZERTY',  'sdgf',       '2016/01/06 14:37'),
    ('AZERTY',  'sdf',        '2015/11/10 10:31'),
    ('SDRTYUI', 'zert',       '2015/12/18 16:11'),
    ('SDRTYUI', 'zert',       '2016/02/12 09:27'),
    ('SDRTYUI', 'zerty',      '2016/02/12 09:28'),
    ('SDRTYUI', 'zerty',      '2015/11/19 13:36'),
    ('SDRTYUI', 'sdfg',       '2016/03/10 16:01'),
    ('SDRTYUI', 'xcfg',       '2015/11/24 14:29'),
    ('SDRTYUI', 'erty',       '2015/11/19 15:04'),
    ('SDRTYUI', 'azert',      '2015/12/11 14:28'),
    ('SDRTYUI', 'sdfg',       '2015/11/13 16:17'),
    ('SDRTYUI', 'iuytr',      '2016/01/06 14:29'),
    ('SDRTYUI', 'zefg',       '2016/02/08 14:48'),
    ('AZSDFGH', 'iuytre',     '2015/10/06 08:27'),
    ('AZSDFGH', 'ratzyerhzs', '2015/10/06 08:17'),
    ('AZSDFGH', 'sdfg',       '2016/02/05 14:11'),
    ('AZSDFGH', 'gzeztze',    '2015/10/07 07:14'),
    ('AZSDFGH', 'fqfz',       '2015/10/07 07:21'),
    ('AZSDFGH', 'gztgztg',    '2015/10/07 07:29'),
    ('AZSDFGH', 'gzfgzz',     '2015/10/07 07:38'),
    ('AZSDFGH', 'gzgzgz',     '2015/10/07 07:48')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+---------+------------+---------------------+
    | id | col1    | col2       | datime              |
    +----+---------+------------+---------------------+
    |  1 | AZERTY  | France     | 2016-03-11 18:59:00 |
    |  2 | AZERTY  | Belgique   | 2015-11-06 16:11:00 |
    |  3 | AZERTY  | Suisse     | 2015-12-18 16:10:00 |
    |  4 | AZERTY  | xxx        | 2016-02-09 11:30:00 |
    |  5 | AZERTY  | zer        | 2016-02-09 16:21:00 |
    |  6 | AZERTY  | er         | 2015-11-24 15:24:00 |
    |  7 | AZERTY  | df         | 2016-01-06 14:38:00 |
    |  8 | AZERTY  | sdgf       | 2016-01-06 14:37:00 |
    |  9 | AZERTY  | sdf        | 2015-11-10 10:31:00 |
    | 10 | SDRTYUI | zert       | 2015-12-18 16:11:00 |
    | 11 | SDRTYUI | zert       | 2016-02-12 09:27:00 |
    | 12 | SDRTYUI | zerty      | 2016-02-12 09:28:00 |
    | 13 | SDRTYUI | zerty      | 2015-11-19 13:36:00 |
    | 14 | SDRTYUI | sdfg       | 2016-03-10 16:01:00 |
    | 15 | SDRTYUI | xcfg       | 2015-11-24 14:29:00 |
    | 16 | SDRTYUI | erty       | 2015-11-19 15:04:00 |
    | 17 | SDRTYUI | azert      | 2015-12-11 14:28:00 |
    | 18 | SDRTYUI | sdfg       | 2015-11-13 16:17:00 |
    | 19 | SDRTYUI | iuytr      | 2016-01-06 14:29:00 |
    | 20 | SDRTYUI | zefg       | 2016-02-08 14:48:00 |
    | 21 | AZSDFGH | iuytre     | 2015-10-06 08:27:00 |
    | 22 | AZSDFGH | ratzyerhzs | 2015-10-06 08:17:00 |
    | 23 | AZSDFGH | sdfg       | 2016-02-05 14:11:00 |
    | 24 | AZSDFGH | gzeztze    | 2015-10-07 07:14:00 |
    | 25 | AZSDFGH | fqfz       | 2015-10-07 07:21:00 |
    | 26 | AZSDFGH | gztgztg    | 2015-10-07 07:29:00 |
    | 27 | AZSDFGH | gzfgzz     | 2015-10-07 07:38:00 |
    | 28 | AZSDFGH | gzgzgz     | 2015-10-07 07:48:00 |
    +----+---------+------------+---------------------+
    --------------
    select *
    from test as tb1
    where datime = (select max(datime) from test as tb2 where tb2.col1 = tb1.col1)
    group by col1
    order by col1
    --------------
     
    +----+---------+--------+---------------------+
    | id | col1    | col2   | datime              |
    +----+---------+--------+---------------------+
    |  1 | AZERTY  | France | 2016-03-11 18:59:00 |
    | 23 | AZSDFGH | sdfg   | 2016-02-05 14:11:00 |
    | 14 | SDRTYUI | sdfg   | 2016-03-10 16:01:00 |
    +----+---------+--------+---------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Est-ce la solution que tu attends ?

    @+

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 110
    Par défaut Suite requete
    Merci beaucoup pour votre retour,

    Cela semble être effectivement être la requete recherchée, mais je dois prendre toute le code envoyé ou seulement une partie ?

    Merci d'avance

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Vous pouvez utiliser la 1ère solution proposée par fd_caramba, la 2ème est à proscrire (non SQL standard et couteuse en temps de traitement)

    Vous pouvez également procéder comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select t1.Code,
           t1.Region,
           t1.DateCR
    From ma_table as T1
    where not exists
         (select 1 
          from ma_table as t2
          where t2.code   = t1.code
            and t2.region = t1.region
            and t2.DateCR > T1.DateCR)

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 110
    Par défaut suite requete
    Bonjour,

    Votre dernier code est facile d'utilisation. En revanche il ne fait qu'un tri par date décroissante sans supprimer les doublons sur la colonne Code

    Je souhaiterai ne plus avoir de doublons sur la colonne code , et n'avoir qu'une ligne par nom de code avec la date la plus récente

    Merci

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Alors enlevez seulement and t2.region = t1.region dans la sous-requête

    Par contre si vous avez 2 régions du même code qui ont la même date, vous aurez 2 lignes (égalité sur date)

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut pierre031.

    Citation Envoyé par pierre031
    Cela semble être effectivement être la requete recherchée, mais je dois prendre toute le code envoyé ou seulement une partie ?
    Uniquement la dernière partie, à partir de la ligne 103.
    Si je vous ai donné les tables, c'est pour avoir un jeu d'essai.
    D'ailleurs ce jeu d'essai est le votre.

    Citation Envoyé par pierre031
    Je souhaiterai ne plus avoir de doublons sur la colonne code , et n'avoir qu'une ligne par nom de code avec la date la plus récente
    En effet, la solution d'Escartefigue ne supprime pas les doublons.

    Si vous n'aimez pas les sous-requêtes, on peut écrire différemment ma solution :
    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
    select tb1.*
    from      test as tb1
    left join test as tb2
    on  tb2.col1   = tb1.col1
    and tb2.datime > tb1.datime
    where tb2.datime is null
    order by tb1.col1
    --------------
     
    +----+---------+--------+---------------------+
    | id | col1    | col2   | datime              |
    +----+---------+--------+---------------------+
    |  1 | AZERTY  | France | 2016-03-11 18:59:00 |
    | 23 | AZSDFGH | sdfg   | 2016-02-05 14:11:00 |
    | 14 | SDRTYUI | sdfg   | 2016-03-10 16:01:00 |
    +----+---------+--------+---------------------+
    @+

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/11/2011, 08h58
  2. Réponses: 2
    Dernier message: 27/07/2011, 13h34
  3. Selectionner la date la plus récente
    Par Maludi dans le forum Access
    Réponses: 2
    Dernier message: 06/02/2006, 11h56
  4. Select la date la plus récente
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/09/2005, 16h45
  5. Extraire la date la plus récente Database MYsql
    Par brazza dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/11/2004, 02h34

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