Portál AbcLinuxu, 9. května 2025 03:28
select * ( select * from tab1 join (select rec, max(datum) from tab2 where krok = "kroka") as s1 on tab1.rec = s2.rec join (select rec, max(datum) from tab2 where krok = "krokb") as s2 on tab1.rec = s2.rec ) where s1.datum > s2.datum
select t1.rec, max(krok_a.datum) from t1, t2 krok_a where t1.rec = krok_a.rec and krok_a.krok = 'KrokA' and not exists( select 0 from t2 krok_b where krok_b.rec = t1.rec and krok_b.krok = 'KrokB' and krok_b.datum > krok_a.datum) group by t1.reckonkretne toto lze udelat jednoduchym group by jen nad tabulkou t2, coz doporucuju jako cviceni.
Asi tak nějak (čistě syntaktický přepis Vašeho zadání):
select t1.Rec
from TAB1 as t1
join TAB2 as t2
on t1.Rec=t2.Rec and t.Krok='KrokA' and t1.Typ=1
left join (
select Rec,min(Datum) as dt
from TAB2
where Krok='KrokB'
group by Rec
) as t3
on t2.Rec=t3.Rec and t2.Datum < t3.dt
where t3.Rec is null
Kdyby jste uvedl co je v TAB2 (primárním) klíčem, tak to možná šlo ještě jednodušeji ( jedna agregace plus jeden join ).
Zase jen syntaktický přepis (bez jakékoliv znalosti skutečného problému)
select
Rec
,max(case when Krok='KrokA' then Date else null end ) -- poslední datum pro KrokA
from TAB2
group by Rec
having
max( case when Krok='KrokA' then Date else null end ) -- nejvyssi datum pro KrokA ( = poslední)
> -- je větší než
max( case when Krok='KrokB' then Date else null end ) -- nejvyšší datum pro KrokB
Ještě jsem zapoměl na dva okrajové případy, kdy jeden z kroků není k dispozici
select
Rec
,max(case when Krok='KrokA' then Date else null end ) -- poslední datum pro KrokA
from TAB2
group by Rec
having
max( case when Krok='KrokA' then Date else null end ) is not null -- existuje krokA
and -- a zároveň
(
max( case when Krok='KrokA' then Date else null end ) -- nejvyssi datum pro KrokA ( = poslední)
> -- je větší než
max( case when Krok='KrokB' then Date else null end ) -- nejvyšší datum pro KrokB
or -- nebo se krokB nedohledá
max( case when Krok='KrokB' then Date else null end ) is NULL
)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.