Bạn đã nói trong nhận xét rằng một mã có thể có hai hàng với cùng một ngày. Vì vậy, đây là dữ liệu lành mạnh.
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
Không có cách xác định nào để biết hàng nào trong số đó là hàng "cuối cùng", ngay cả khi bạn sắp xếp theo mã và "ngày". (Trong mô hình quan hệ - một mô hình dựa trên các tập toán học - thứ tự của các cột là không liên quan và thứ tự của các hàng cũng không liên quan.) Trình tối ưu hóa truy vấn miễn phí trả về các hàng là cách nó cho là tốt nhất, vì vậy truy vấn này
select *
from temp1
order by mydate, code
có thể trả lại điều này trong một lần chạy,
01.01.2014 1 3.50
01.01.2014 1 17.25
01.01.2014 1 99.34
và cái này vào cái khác.
01.01.2014 1 3.50
01.01.2014 1 99.34
01.01.2014 1 17.25
Trừ khi bạn lưu trữ một số giá trị tạo nên ý nghĩa của cuối cùng rõ ràng, những gì bạn đang cố gắng làm không thể thực hiện được. Khi mọi người cần thực hiện cuối cùng hiển nhiên, họ thường sử dụng dấu thời gian.
Sau những thay đổi của bạn, truy vấn này dường như trả về những gì bạn đang tìm kiếm.
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;