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

Làm thế nào để lấy id của hàng đã được chọn bởi hàm tổng hợp?

Có ít nhất 3 cách, xem bên dưới:

CREATE TEMP TABLE test (
    id integer, name text, amount numeric, datefrom timestamptz
);

COPY test FROM STDIN (FORMAT csv);
3,a,8,2018-01-01
4,a,3,2018-01-15 10:00
5,b,1,2018-02-20
6,b,1,2019-01-01
\.

Phương pháp 1. sử dụng DISTINCT ON (dành riêng cho PostgreSQL)

SELECT DISTINCT ON (name)
  id, name, amount
FROM test
ORDER BY name, amount DESC, datefrom ASC;

Phương pháp 2. sử dụng các hàm cửa sổ

SELECT id, name, amount FROM (
  SELECT *, row_number() OVER (
    PARTITION BY name
    ORDER BY amount DESC, datefrom ASC) AS __rn
  FROM test) AS x
WHERE x.__rn = 1;

Phương pháp 3. sử dụng truy vấn con được corelated

SELECT id, name, amount FROM test
WHERE id = (
  SELECT id FROM test AS t2
  WHERE t2.name = test.name
  ORDER BY amount DESC, datefrom ASC
  LIMIT 1
); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhanh nhất để lấy dữ liệu tuần tự từ cơ sở dữ liệu là gì?

  2. Di chuyển từ Postgres sang SQL Server 2008

  3. Cách diễn giải giá trị PosgreSQL txid_current ()

  4. Kiểm tra xem bản ghi có tồn tại trong bảng Postgres không

  5. THAM GIA LEFT OUTER trên cột mảng có nhiều giá trị