PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL, Tổng hợp tùy chỉnh

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn cập nhật đơn giản chậm trên cơ sở dữ liệu PostgreSQL với 3 triệu hàng

  2. Làm cách nào để chuyển mật khẩu vào pg_dump?

  3. Có cách nào để đặt thời gian hết hạn, sau đó mục nhập dữ liệu sẽ tự động bị xóa trong PostgreSQL không?

  4. psql:FATAL:cơ sở dữ liệu <người dùng> không tồn tại

  5. Làm cách nào để xóa các dấu ngoặc kép khỏi một bảng trong postgresql?