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 :

Modifier une valeur dans une colonne d'une VUE [MySQL-5.6]


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2021
    Messages : 33
    Points : 28
    Points
    28
    Par défaut Modifier une valeur dans une colonne d'une VUE
    Bonjour,
    J'ai une vue qui donne comme résultat ce tableau ci-dessous:
    je veux faire une requête qui modifie la fin de tache si on a deux programmes avec le même noms , même date et Ecart time = 00:00:01 et modifier la Fin tache précédente par la Fin Tache qui a un écart de 00:00:01.
    Dans mon cas je veux fusionner Prog 1 de la ligne 1 et Prog 1 de la ligne 2 , c'est à dire mettre la Fin Tache de la ligne 2 dans Fin Tache de la ligne 1:

    Nom du programme Date Debut tache Fin tache Ecart time
    Prog 1 12/01/2021 10:54:31 10:59:59 00:15:12
    Prog 1 12/01/2021 11:00:00 11:01:36 00:00:01
    Prog 2 13/01/2021 11:01:37 11:02:26 00:00:01

    ce qui va me donner çà comme resultat:


    Nom du programme Date Debut tache Fin tache Ecart time
    Prog 1 12/01/2021 10:54:31 11:01:36 00:15:12
    Prog 2 13/01/2021 11:01:37 11:02:26 00:00:01

    Comment je peux résoudre çà ???? Merci de m'aider !

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    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 142
    Points : 38 926
    Points
    38 926
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il suffit d'ignorer les lignes pour lesquelles l'écart est de 1 seconde

    SELECT [...] WHERE TIMEDIFF(DebTache, FinTache) > '00:00:01'

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2021
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Bonjour,
    merci pour votre réponse, mais comme çà il va m'ignorer toutes les lignes qui ont un ecart de '00:00:01'.
    Peut être j'ai mal expliqué:
    je veux que les 2 lignes avec le meme programme avec un ecart de 1 seconde, seront fusionner sur une meme ligne, dont je garde debut tache du prog 1 et je modifie fin tache du prog1 par fin tache du prog 2.

    ce qui va me donner çà comme resultat:


    Nom du programme Date Debut tache Fin tache Ecart time
    Prog 1 12/01/2021 10:54:31 11:01:36 00:15:12
    Prog 2 13/01/2021 11:01:37 11:02:26 00:00:01

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    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 142
    Points : 38 926
    Points
    38 926
    Billets dans le blog
    9
    Par défaut
    question subsidiaire : votre écart ne correspond pas aux heures de début et de fin, si c'est volontaire il faut expliquer la règle

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    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 142
    Points : 38 926
    Points
    38 926
    Billets dans le blog
    9
    Par défaut
    Si on considère que l'écart c'est heure de fin - heure de début (je ne tiens pas compte des éventuels changements de jours pour l'instant)
    alors, on peut faire comme ci-dessous :

    Notez qu'il est inutile de stocker l'écart, c'est une redondance, il vaut mieux le calculer quand c'est nécessaire.

    Création du jeu d'essais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with tab0 (prog, dte, hdeb, hfin) as
        (select 'prog1', '2021-01-12', '10:54:31', '10:59:59'   union all
         select 'prog1', '2021-01-12', '11:00:00', '11:01:36'   union all
         select 'prog1', '2021-01-12', '11:01:37', '11:01:38'   union all
         select 'prog2', '2021-01-12', '11:00:00', '11:00:01'   union all
         select 'prog3', '2021-01-12', '12:12:00', '13:59:59'
        )

    Requête :
    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
    select prog
         , dte
         , hdeb
         , hfin
         , ecart
    from (select prog
               , lead (timediff(hfin, hdeb), 1) 
                 over(partition by prog
                      order by hdeb asc) as ecsuiv
               , dte
               , hdeb
               , hfin
               , timediff(hfin, hdeb) as ecart
         from tab0     
        ) tab1
    where tab1.ecsuiv > '00:00:01'   
       or tab1.ecsuiv is null

    Résultat :

    prog dte hdeb hfin ecart
    prog1 2021-01-12 10:54:31 10:59:59 00:05:28.000000
    prog1 2021-01-12 11:01:37 11:01:38 00:00:01.000000
    prog2 2021-01-12 11:00:00 11:00:01 00:00:01.000000
    prog3 2021-01-12 12:12:00 13:59:59 01:47:59.000000

    Le résultat est conforme :
    • 'prog1', '2021-01-12', '11:01:37', '11:01:38' est éliminé, durée une seconde mais on a d'autres lignes pour 'prog1'
    • 'prog2', '2021-01-12', '11:00:00', '11:00:01' est conservé bien qu'il ne dure qu'une seconde car c'est la seule ligne pour 'prog2'

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2021
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Bonjour,
    J'ai essayé votre requête sur ma table et çà correspond bien à ce que je cherche comme résultat.
    merci infiniment pour votre aide!!!

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

Discussions similaires

  1. Recherche d'une valeur dans plusieurs colonnes
    Par Arnaud F. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/03/2009, 11h44
  2. Modifier des valeurs dans une matrice
    Par m4tl4b dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/04/2008, 16h51
  3. COmment modifier des valeurs dans une requête?
    Par thibouille dans le forum Bases de données
    Réponses: 20
    Dernier message: 26/02/2008, 16h43
  4. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  5. Réponses: 5
    Dernier message: 12/10/2007, 10h06

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