1. #1
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 3
    Points
    3

    Par défaut Réduire nb lignes table par min et max sur 1 champ quand le contenu des 3 autres champs sont identiques

    Bonjour,

    Je vais commencer par me présenter : FX 30 ans, Toulouse, consultant dans le secteur aéronautique.

    Je travaille en ce moment sur une table A d'1 millions 500 lignes dont je cherche à réduire la taille grâce à MySQL, pour pouvoir ensuite la croiser avec une autre table B plus petite par une jointure simple.

    Je joins exemple de table A en entrée et ce dont j'aurais besoin en sortie. Le principal moyen de réduire le nombre de lignes est de n'afficher que la valeur min et la valeur max d'un champ dans une cellule quand les 3 autres champs sont identiques (l'exemple sera plus parlant j'espère).

    Voilà le code que j'ai tenté pour l'instant sans succès (requête qui a tourné plus de 2h pour rien...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
     
     Table A.Champ1 as  Champ1,
     Table A.Champ2 as  Champ2,
     Table A.Champ3 as  Champ3,
     Table B.Champ1 as  Champ4,
     Table B.Champ2 as  Champ5,
     
    FROM TABLE A INNER JOIN TABLE B ON TABLE A.CHAMP3 = TABLE B.CHAMP1
    group by Champ1, Champ2, Champ3, Champ4, Champ5

    -------------------------------


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TABLE A.Champ1, Table A.Champ 3 ,Table B.Champ4 ,Table B.Champ5 GROUP_CONCAT( Table A.Champ 2)
     
    FROM Table A INNER JOIN Table B ON Table A. Champ 3 = Table B.Champ1
    GROUP BY  Table A.Champ1, Table A.Champ3 ,Table B. Champ 1 ,Table B. Champ 2


    Merci de votre aide !

    Cdlt
    FX
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    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 : 2 491
    Points : 7 584
    Points
    7 584

    Par défaut

    Salut Kukuxumusu.

    Votre pseudo est-elle une entreprise basque de la ville de pampelune ?

    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
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SET collation_connection = latin1_general_ci
    --------------
     
    --------------
    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`  char(01)         not null,
      `col2`  integer unsigned not null,
      `col3`  char(01)         not null,
      `col4`  char(01)         not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`col1`,`col2`,`col3`,`col4`) values
      ('A',     1, 'B', 'C'),
      ('A', 10008, 'B', 'C'),
      ('A',    50, 'B', 'C'),
      ('D',    12, 'E', 'F'),
      ('D',  8815, 'E', 'F'),
      ('D',    42, 'E', 'F'),
      ('D',     3, 'E', 'F')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------+-------+------+------+
    | id | col1 | col2  | col3 | col4 |
    +----+------+-------+------+------+
    |  1 | A    |     1 | B    | C    |
    |  2 | A    | 10008 | B    | C    |
    |  3 | A    |    50 | B    | C    |
    |  4 | D    |    12 | E    | F    |
    |  5 | D    |  8815 | E    | F    |
    |  6 | D    |    42 | E    | F    |
    |  7 | D    |     3 | E    | F    |
    +----+------+-------+------+------+
    --------------
    select  col1,
            concat(min(col2), '; ', max(col2)) as col2,
            col3,
            col4
      from  test
    group by col1, col3, col4
    --------------
     
    +------+----------+------+------+
    | col1 | col2     | col3 | col4 |
    +------+----------+------+------+
    | A    | 1; 10008 | B    | C    |
    | D    | 3; 8815  | E    | F    |
    +------+----------+------+------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Vous devriez être plus précis sur votre demande car il n'existe pas une seule solution sur votre exemple.
    Il serait judicieux de donner un jeu d'essai plus complet en tenant compte de tous vos cas de figures.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Bonjour Artemus,

    Effectivement bien vu pour le pseudo dû à mes origines basques.

    S'il existe plusieurs solutions, celle que vous proposez là semble répondre au besoin !
    A moins qu'elle ne soit pas adaptée à une table de 1,5millions de lignes ?

    Ci-joint un fichier plus étendu.

    @+
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    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 : 2 491
    Points : 7 584
    Points
    7 584

    Par défaut

    Salut Kukuxumusu.

    J'ai jeté un coup d’œil rapide à votre fichier excel et la requête donne bien le résultat que vous attendez.
    L'intérêt de faire un "group by" sur les trois colonnes permet ainsi de séparer les doublons.

    Ajouter des index ne sert à rien car la requête n'utilise pas la clause "where".

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Simple et efficace ! je ne connaissais pas concat min et max... dommage que cette fonction n'existe pas dans Access également !

    Merci beaucoup c'est résolu.

    Bon weekend

  6. #6
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    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 : 2 491
    Points : 7 584
    Points
    7 584

    Par défaut

    Salut Kukuxumusu.

    Qu'est-ce qui vous empêche de créer sous Access des fonctions qui vont les simuler ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Ma méconnaissance tout simplement !

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

Discussions similaires

  1. Rechercher semaine min et max sur periode glissante
    Par gudul dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/08/2014, 14h47
  2. requête min et max sur tranche horaire
    Par PhilLU dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/08/2013, 14h17
  3. Min et Max sur une periode calculée
    Par Alex3030 dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/06/2013, 07h08
  4. Réponses: 3
    Dernier message: 29/04/2010, 13h54
  5. requête max sur plusieurs champs
    Par logica dans le forum Access
    Réponses: 3
    Dernier message: 28/03/2006, 16h31

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