Comment obtenir uniquement les valeurs de niveau_20 dans le tableau A qui n'existent pas dans le tableau B étant donné le FF. Scénario:
S'il y a plusieurs valeurs de prix, comparez la valeur avec la date maximale de B P>
Tableau A P> blockQuote>
XXX PRE> LI> ul> Tableau B P> blockQuote>
xxx pré> TABLEAU C P> blockQuote>
xxx pré> Sortie attendue: P> blockQuote>
xxx pré> mon code (faux): p> blockQuote>
xxx pré> p>
3 Réponses :
Utilisation de cette requête sans inclure le tableau B code> est suffisant en raison de votre sortie attendue et en fonction des données de vos tableaux:
with a(ALIAS, LEVEL_20, POINTS, "DATE") as
(
select 'Jbax',300,325,date'2018-06-20' from dual union all
select 'Cvg2',100,103,date'2018-06-20' from dual union all
select 'Deg1',200,281,date'2018-06-20' from dual
), b(ALIAS, CODE_LEVEL, PRIZE, "DATE") as
(
select 'Jbax','Level_20',500,date'2017-01-15' from dual union all
select 'Jbax','Level_10',200,date'2017-03-20' from dual union all
select 'Cvg2','Level_20',100,date'2017-04-05' from dual union all
select 'Deg1',null,null,null from dual union all
select 'Cvg2','Level_20',50,date'2017-02-01' from dual
), c(ALIAS,NAME) as
(
select 'Jbax','Jessie' from dual union all
select 'Cvg2','Carol' from dual union all
select 'Deg1','Danny' from dual
)
select c.name, a.level_20
from c
join a on a.alias = c.alias
where (a.alias,a.level_20) not in
(select a.alias,b.prize
from a
join b on b.prize = a.level_20 and b.code_level = 'Level_20');
NAME LEVEL_20
------ --------
Jessie 300
Danny 200
Merci, mais ce que je veux dire par plusieurs valeurs de prix, CVG2 a 100 et 50 dans le tableau B code> - Je veux comparer la valeur de niveau_20 de
A code> avec la date maximale de la table < Code> B code> dans ce cas. Dis que je change de CVG2 avec 200 et 100 (à partir de 100 et 50 à l'origine avec les mêmes dates) dans le tableau
B code>, votre code exclura Carol - mais elle doit être dans la sortie depuis 200 (
B code> avec la date maximale) <> 100 (
A code>)
Cela devrait vous donner le résultat attendu:
with get_max_value as ( select b2.*, max(b2."DATE") over (partition by b2.ALIAS) mdate from b b2 ) select my_c.name, my_a.level_20 from c my_c join a my_a on my_a.alias = my_c.alias where (my_a.alias,my_a.level_20) not in (select a2.alias, gmv.prize from a a2 join get_max_value gmv on gmv.prize = a2.level_20 and gmv.code_level = 'Level_20' WHERE gmv."DATE" = gmv.mdate);
Cette requête ajoute le tri dans le tableau résultat: p> alors vous pouvez donc maintenant que vous puissiez Prenez seulement ces lignes qui sont les plus récentes em> ( B code>:
rn = 1 code>) et ont un prix NULL ou un prix diffère de
a.level_20 code>: p> < Pré> xxx pré>
Exactement ce dont j'ai besoin, merci je suis content que vous ayez compris mes besoins!