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

Trả về các hàng có tối đa một cột trong Postgresql

Postgres hỗ trợ chức năng cửa sổ phù hợp với tình huống này:

select date, symbol, value, created_time
from (select *,
    rank() over (partition by date, symbol order by created_time desc) as rownum
  from test_table) x
where rownum = 1

Đối với mọi kết hợp của date , ký hiệu symbol , truy vấn này trả về giá trị symbolcreated_time từ hàng có giá trị cao nhất (tức là cuối cùng ) created_time của date đó và ký hiệu symbol .

Tôi sẽ đề xuất chỉ mục này:

CREATE UNIQUE INDEX test_table_idx 
  ON test_table (date, symbol, created_time, value)

Đó là một phủ chỉ mục (có tất cả các giá trị bạn cần cho truy vấn, loại bỏ nhu cầu truy cập bảng thực tế và bảng mà bạn đã có), nhưng lưu ý rằng created_time đến trước value , vì vậy dữ liệu đã có thứ tự phân vùng và giá trị symbol là thuộc tính ít quan trọng nhất, vì nó không tham gia vào bất kỳ việc xác định hàng nào sẽ trả về.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - làm tròn số dấu phẩy động

  2. PHP và Postgres:bắt lỗi?

  3. Không thể khởi động postgresql.service?

  4. Đọc tệp CSV / Excel từ tệp SFTP, thực hiện một số thay đổi trong các tệp đó bằng Pandas và lưu lại

  5. Cách tạo Tổng thời gian chạy vòng quay