U zei in opmerkingen dat één code twee rijen met dezelfde datum kan hebben. Dit zijn dus verstandige gegevens.
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
Er is geen deterministische manier om te bepalen welke van die rijen de "laatste" is, zelfs niet als u sorteert op code en "datum". (In het relationele model - een model gebaseerd op wiskundige verzamelingen - is de volgorde van de kolommen niet relevant en de volgorde van de rijen niet relevant.) De query-optimizer is vrij om rijen te retourneren op de manier die het beste denkt, dus deze query
select *
from temp1
order by mydate, code
zou dit in één keer kunnen retourneren,
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
en dit op een ander.
01.01.2014 1 3.50
01.01.2014 1 99.34
01.01.2014 1 17.25
Tenzij u een waarde opslaat die de betekenis van laatste . maakt duidelijk, wat je probeert te doen is niet mogelijk. Wanneer mensen laatste moeten maken voor de hand liggend, gebruiken ze meestal een tijdstempel.
Na uw wijzigingen lijkt deze zoekopdracht te geven wat u zoekt.
with distinct_codes as (
select distinct code
from temp1
),
corrected_table as (
select
case when mydate <> '' then TO_TIMESTAMP(mydate, 'DD.MM.YYYY HH24:MI:SS')
else null
end as mydate,
code,
price
from temp1
),
max_dates as (
select code, max(mydate) max_date
from corrected_table
group by code
)
select c1.mydate, d1.code, coalesce(c1.price, 0)
from corrected_table c1
inner join max_dates m1
on m1.code = c1.code
and m1.max_date = c1.mydate
right join distinct_codes d1
on d1.code = c1.code
order by code;