V komentářích jste uvedl, že jeden kód může mít dva řádky se stejným datem. Takže toto jsou rozumná data.
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
Neexistuje žádný deterministický způsob, jak zjistit, který z těchto řádků je „poslední“, i když třídíte podle kódu a „data“. (V relačním modelu – modelu založeném na matematických množinách – je pořadí sloupců irelevantní a pořadí řádků je irelevantní.) Optimalizátor dotazů může vracet řádky tak, jak považuje za nejlepší, takže tento dotaz
select *
from temp1
order by mydate, code
může to vrátit při jednom spuštění,
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
a toto na jiném.
01.01.2014 1 3.50
01.01.2014 1 99.34
01.01.2014 1 17.25
Pokud neuložíte nějakou hodnotu, která znamená poslední je jasné, že to, o co se snažíš, není možné. Když lidé potřebují udělat poslední je zřejmé, že obvykle používají časové razítko.
Po provedených změnách se zdá, že tento dotaz vrací to, co hledáte.
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;