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

SQL Oracle Discussion :

Select date max ou null / SQL


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 4
    Par défaut Select date max ou null / SQL
    Bonjour à vous,

    Tous mes vœux pour cette année 2020

    Je me permet de vous demander conseil sur mon code sql, en effet je souhaiterai sélectionner en condition les ligne ayants la date "null" ou max si pas de date "null" dans le champs v.cdscl1.

    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
     
    select l.pkpr,v.titlc,v.titll,v.cndct,v.ctct,v.cnct,v.cdscl1,l.lklo,v.lclo1,
           decode(a.bcoinba,'I',null,
                           decode(l.leta,0,'rez-de-chaussee',
                                         01,' 1er etage',
                              to_char(l.leta,'90')||'eme etage'))etage,
           v.adresse1,v.adresse2,v.adresse3,v.ville,
            h.hsl,l.annmev,l.prixvt,l.prodfin
    from klogemt l, kprog p, kcaushs h,vuadres v, kbatimt a
    where l.pkpr=p.pkpr
    and    v.lklo=l.lklo 
    --and  v.cdscl1 is null
    and    a.pkpr=l.pkpr
    and    a.tctr=l.tctr
    and    a.bcba=l.bcba
    and  (l.hsc ='FU' or l.hsc like 'V%')
    and   l.hsc=h.hsc(+)
    and  h.hsl='FUTURE VENTE OU DEMO'
    order by l.pkpr,l.lklo

    le résultat partiel actuel :

    v.cnct v.cdscl1 l.lklo
    9011006 "null" 3351L02
    9112036 17/05/2004 3351L03
    8008004 30/06/1994 3351L03
    2008258 "null" 3351L03
    2005573 31/01/2010 3351L03
    2007155 06/07/2011 3351L03
    2003273 20/11/2007 3351L03
    9702026 04/08/2007 3351L04
    2000337 30/11/2009 3351L04
    8907041 06/03/1996 3351L04
    2006471 06/09/2017 3351L04
    9104009 14/07/1999 3351L04
    2014777 06/10/2019 3351L04

    le résultat désiré :
    9011006 "null" 3351L02
    2008258 "null" 3351L03
    2014777 06/10/2019 3351L04

    je n'arrive pas a mettre cela en place dans mon cote.

    Merci d'avance de votre précieuse aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 167
    Par défaut
    Bonjour et meilleurs voeux aussi.

    La max date par rapport à quoi? Toutes les lignes de la table? Si oui voici une possibilité:

    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
    with input_data as (
    select l.pkpr,v.titlc,v.titll,v.cndct,v.ctct,v.cnct,v.cdscl1,l.lklo,v.lclo1,
           decode(a.bcoinba,'I',null,
                           decode(l.leta,0,'rez-de-chaussee',
                                         01,' 1er etage',
                              to_char(l.leta,'90')||'eme etage'))etage,
           v.adresse1,v.adresse2,v.adresse3,v.ville,
            h.hsl,l.annmev,l.prixvt,l.prodfin, max(v.cdscl1) over () max_date
    from klogemt l, kprog p, kcaushs h,vuadres v, kbatimt a
    where l.pkpr=p.pkpr
    and    v.lklo=l.lklo 
    --and  v.cdscl1 is null
    and    a.pkpr=l.pkpr
    and    a.tctr=l.tctr
    and    a.bcba=l.bcba
    and  (l.hsc ='FU' or l.hsc like 'V%')
    and   l.hsc=h.hsc(+)
    and  h.hsl='FUTURE VENTE OU DEMO'
    )
    select pkpr,
           titlc,
           titll,
           cndct,
           ctct,
           cnct,
           cdscl1,
           lklo,
           lclo1,
           etage,
           adresse1,
           adresse2,
           adresse3,
           ville,
           hsl,
           annmev,
           prixvt,
           prodfin
    from input_data
    where nvl(cdscl1, max_date) = max_date 
    order by pkpr, lklo;

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant MOE-MOA Finance
    Inscrit en
    Novembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE-MOA Finance
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 17
    Par défaut
    Bonjour
    Pour avoir ton résultat attendu, il faut écrire :

    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
    
    select  l.pkpr,v.titlc,v.titll,v.cndct,v.ctct,v.cnct,v.cdscl1,l.lklo,v.lclo1,
              decode(a.bcoinba,'I',null,
                         decode(l.leta,0,'rez-de-chaussee',
                                    01,' 1er etage',
                                    to_char(l.leta,'90')||'eme etage'))etage,
              v.adresse1,v.adresse2,v.adresse3,v.ville,
              h.hsl,l.annmev,l.prixvt,l.prodfin
    from   klogemt l, kprog p, kcaushs h,vuadres v, kbatimt a
    where  l.pkpr=p.pkpr
    and    v.lklo=l.lklo 
     and   ( v.cdscl1 is null
            OR 
    	   v.cdscl1 = (select  max(cdscl1) from vuadres
    	                     where    -- Maintenant il faut reprendre les memes jointures que celles de la table v 
    		            vuadres.lklo=l.lklo   --dans notre cas une seule jointure (celle en bleu)
    		        )
           )
    and    a.pkpr=l.pkpr
    and    a.tctr=l.tctr
    and    a.bcba=l.bcba
    and  (l.hsc ='FU' or l.hsc like 'V%')
    and   l.hsc=h.hsc(+)
    and  h.hsl='FUTURE VENTE OU DEMO'
    order by l.pkpr,l.lklo

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 543
    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 543
    Billets dans le blog
    10
    Par défaut
    bonjour,

    Je suppose que "null" n'est pas le contenu de la colonne mais le marqueur d'une colonne nullable, auquel cas la requête à utiliser est de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Col1, max(Col_date)
    from ma_table
    group by Col1
    order by Col1
    EDIT : Si toutefois la colonne contient tantôt une chaînes de caractères représentant une date, tantôt la chaîne de caractères "null", vous pouvez utiliser un CASE comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select Col1
         , max(case when Col_date='null' then '0001-01-01'
                    else Col_date
               end)
    from ma_table
    group by Col1
    order by Col1

  5. #5
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 4
    Par défaut
    Merci de vos réponses , rapide , cohérente et bienveillante.


    Avec ta solutions Mahdois j'obtiens , deux lignes par lklo , une avec null et une autre avec la date max.
    Il faudrait que la ligne de date max ne s'affiche pas si nous avons null.

    Plus explicitement , je souhaite garder les lignes avec null , et si pas de ligne avec null afficher la date max.

    J'ajoute que biensur null , n'est pas une chaine de caractère mais une donnée vide.

    Si sur ton code on peut ajouter , si l'on a deux lignes avec le même lklo , alors garder celle avec le null , ce serai parfait




    Citation Envoyé par Mahdois Voir le message
    Bonjour
    Pour avoir ton résultat attendu, il faut écrire :

    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
    
    select  l.pkpr,v.titlc,v.titll,v.cndct,v.ctct,v.cnct,v.cdscl1,l.lklo,v.lclo1,
              decode(a.bcoinba,'I',null,
                         decode(l.leta,0,'rez-de-chaussee',
                                    01,' 1er etage',
                                    to_char(l.leta,'90')||'eme etage'))etage,
              v.adresse1,v.adresse2,v.adresse3,v.ville,
              h.hsl,l.annmev,l.prixvt,l.prodfin
    from   klogemt l, kprog p, kcaushs h,vuadres v, kbatimt a
    where  l.pkpr=p.pkpr
    and    v.lklo=l.lklo 
     and   ( v.cdscl1 is null
            OR 
    	   v.cdscl1 = (select  max(cdscl1) from vuadres
    	                     where    -- Maintenant il faut reprendre les memes jointures que celles de la table v 
    		            vuadres.lklo=l.lklo   --dans notre cas une seule jointure (celle en bleu)
    		        )
           )
    and    a.pkpr=l.pkpr
    and    a.tctr=l.tctr
    and    a.bcba=l.bcba
    and  (l.hsc ='FU' or l.hsc like 'V%')
    and   l.hsc=h.hsc(+)
    and  h.hsl='FUTURE VENTE OU DEMO'
    order by l.pkpr,l.lklo

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 167
    Par défaut
    As-tu essayé la version que j'ai proposée?

  7. #7
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 4
    Par défaut
    Merci Vanagreg pour ta réponse,

    j'ai effectivement testé ta solution , le resultat m'affiche l'ensemble des lignes avec null , et bizarrement une ligne avec la date max sur un lklo.


    Citation Envoyé par vanagreg Voir le message
    As-tu essayé la version que j'ai proposée?

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 167
    Par défaut
    N'est-ce pas ce que tu voulais?

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant MOE-MOA Finance
    Inscrit en
    Novembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE-MOA Finance
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 17
    Par défaut
    ça devrait éliminer les lignes superflues:

    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
     
    select  l.pkpr,v.titlc,v.titll,v.cndct,v.ctct,v.cnct,v.cdscl1,l.lklo,v.lclo1,
              decode(a.bcoinba,'I',null,
                         decode(l.leta,0,'rez-de-chaussee',
                                    01,' 1er etage',
                                    to_char(l.leta,'90')||'eme etage'))etage,
              v.adresse1,v.adresse2,v.adresse3,v.ville,
              h.hsl,l.annmev,l.prixvt,l.prodfin
    from   klogemt l, kprog p, kcaushs h,vuadres v, kbatimt a
    where  l.pkpr=p.pkpr
    and    v.lklo=l.lklo 
     and   ( v.cdscl1 is null
            OR 
    	   (v.cdscl1 = (select  max(cdscl1) from vuadres
    	                     where    -- Maintenant il faut reprendre les memes jointures que celles de la table v 
    		            vuadres.lklo=l.lklo   --dans notre cas une seule jointure (celle en bleu)
    		            )
    		AND NOT EXISTS (SELECT 1 FROM vuadres
    		                           WHERE  lklo=l.lklo
    					   AND    cdscl1 IS NULL
                                               )
              )
           )
    and    a.pkpr=l.pkpr
    and    a.tctr=l.tctr
    and    a.bcba=l.bcba
    and  (l.hsc ='FU' or l.hsc like 'V%')
    and   l.hsc=h.hsc(+)
    and  h.hsl='FUTURE VENTE OU DEMO'
    order by l.pkpr,l.lklo;

  10. #10
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 4
    Par défaut
    Cela fonctionne , je vous remercie pour votre aide.

    Cordialement.

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

Discussions similaires

  1. Date max ou null
    Par orneen dans le forum SQL
    Réponses: 10
    Dernier message: 18/12/2018, 15h03
  2. Select max(date) max(heure)
    Par silver.spike dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/06/2007, 19h26
  3. [Access 2003] requete sql date max par certain champs
    Par Gary_Stoupy dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/02/2007, 09h36
  4. Select Avec Max(date)
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/08/2006, 17h26
  5. [Oracle] selection du max en groupand par date
    Par pelo68 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 05/05/2006, 22h05

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