コメントで、1つのコードに同じ日付の2つの行を含めることができるとおっしゃいました。つまり、これは正気のデータです。
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
コードと「日付」で並べ替えたとしても、これらの行のどれが「最後」の行であるかを決定論的に判断する方法はありません。 (リレーショナルモデル(数学セットに基づくモデル)では、列の順序は無関係であり、行の順序は無関係です。)クエリオプティマイザーは行を自由に返すことが最善の方法であるため、このクエリ
select *
from temp1
order by mydate, code
1回の実行でこれを返す可能性があります
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
そしてこれは別のものです。
01.01.2014 1 3.50
01.01.2014 1 99.34
01.01.2014 1 17.25
最後の意味を表す値を保存しない限り 明らかに、あなたがやろうとしていることは不可能です。人々が最後にする必要があるとき 明らかに、彼らは通常タイムスタンプを使用します。
変更後、このクエリは探しているものを返すようです。
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;