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

Cách lấy hàng cuối cùng cho mỗi nhóm trong PostgreSQL

Đôi khi bạn có thể cần lấy hàng cuối cùng của bảng hoặc lấy hàng cuối cùng cho mỗi nhóm trong PostgreSQL. Đây là cách lấy bản ghi cuối cùng cho mỗi nhóm trong PostgreSQL.


Nhận hàng cuối cùng của bảng

Giả sử bạn có bảng PostgreSQL sau.

postgres=#create table product_sales(product varchar(10),
          order_date date, sale int);

postgres=#insert into product_sales(product, order_date, sale)
values('A','2020-05-01 03:00:00',250),
('B','2020-05-01 05:30:00',350),
('C','2020-05-01 07:45:00',1250),
('A','2020-05-02 02:34:00',450),
('B','2020-05-02 01:24:00',650),
('C','2020-05-02 12:34:00',1050),
('A','2020-05-03 04:00:45',150),
('B','2020-05-03 05:45:00',250),
('C','2020-05-03 09:50:00',1850);

postgres=# select * from product_sales;
 product |      order_date     | sale
---------+---------------------+------
 A       | 2020-05-01 03:00:00 |  250
 B       | 2020-05-01 05:30:00 |  350
 C       | 2020-05-01 07:45:00 | 1250
 A       | 2020-05-02 02:34:00 |  450
 B       | 2020-05-02 01:24:00 |  650
 C       | 2020-05-02 12:34:00 | 1050
 A       | 2020-05-03 04:00:45 |  150
 B       | 2020-05-03 05:45:00 |  250
 C       | 2020-05-03 09:50:00 | 1850

Phần thưởng đã đọc:Hàm tạo PostgreSQL


Đây là truy vấn để lấy hàng cuối cùng của bảng, tùy thuộc vào cách các hàng của bạn được sắp xếp. Trong ví dụ trên, vì bản ghi của chúng tôi được thêm theo dấu thời gian, chúng tôi chọn hàng có dấu thời gian mới nhất.

postgres=# select * from product_sales 
           order by order_date desc
           limit 1;
 product |     order_date      | sale
---------+---------------------+------
 C       | 2020-05-03 09:50:00 | 1850

Trong truy vấn trên, chúng tôi sắp xếp các hàng theo thứ tự giảm dần của dấu thời gian và chọn 1 hàng trên cùng bằng cách sử dụng mệnh đề LIMIT.

Phần thưởng đã đọc:PostgreSQL Tạo giản đồ



Nhận bản ghi cuối cùng cho mỗi nhóm

Đây là truy vấn SQL để lấy hàng cuối cùng cho mỗi nhóm, tức là mỗi sản phẩm.

postgres=# select distinct on (product) product, order_date, sale
           from product_sales
           order by product, order_date desc;

 product |     order_date      | sale
---------+---------------------+------
 A       | 2020-05-03 04:00:45 |  150
 B       | 2020-05-03 05:45:00 |  250
 C       | 2020-05-03 09:50:00 | 1850

Trong truy vấn trên, trước tiên, chúng tôi sắp xếp các hàng theo sản phẩm (tăng dần) và order_date (giảm dần). Sau đó, chúng tôi sử dụng mệnh đề DISTINCT ON để chỉ chọn bản ghi cao nhất cho mỗi nhóm, không là gì ngoài bản ghi cuối cùng cho mỗi nhóm.

Phần thưởng đọc:Cách tạo biểu đồ trong PostgreSQL

Hy vọng rằng bây giờ bạn có thể dễ dàng lấy hàng cuối cùng cho mỗi nhóm trong PostgreSQL.

Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tìm thấy thư viện máy khách PostgreSQL (libpq)

  2. Trả về dưới dạng mảng các đối tượng JSON trong SQL (Postgres)

  3. Trả lại id nếu một hàng tồn tại, INSERT nếu không

  4. Nhận số ngày trong tháng trong PostgreSQL

  5. Postgres kích hoạt sau khi chèn truy cập MỚI