同一行中每个用户的最后两条记录Postgresql

同一行中每个用户的最后两条记录Postgresql,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我有两张桌子,客户桌和发票桌 CREATE TABLE main.CUSTOMER ( CUSTOMER_ID SERIAL PRIMARY KEY, NAME VARCHAR(128) NOT NULL, BIRTH_DATE DATE NOT NULL, CREATION_DATE TIMESTAMP NOT NULL DEFAULT(NOW()) ); CREATE TABLE m

我有两张桌子,客户桌和发票桌

CREATE TABLE main.CUSTOMER
(
CUSTOMER_ID     SERIAL          PRIMARY KEY,
NAME            VARCHAR(128)    NOT NULL,
BIRTH_DATE      DATE            NOT NULL,
CREATION_DATE   TIMESTAMP       NOT NULL    DEFAULT(NOW())
);

CREATE TABLE main.INVOICE
(
INVOICE_ID      SERIAL      PRIMARY KEY,
INVOICE_DATE    TIMESTAMP   NOT NULL,
AGENT_ID        BIGINT      NOT NULL,
AMOUNT          NUMERIC(18, 5) NOT NULL,
CUSTOMER_ID     BIGINT      NOT NULL,
FOREIGN KEY (CUSTOMER_ID) REFERENCES main.CUSTOMER (CUSTOMER_ID)
);

如何获取每个客户(同一行)的最后两个发票金额。

一种方法是使用
行号()

select c.*,
       max(case when seqnum = 1 then amount end) as amount_latest,
       max(case when seqnum = 2 then amount end) as amount_prev
from customer c join
     (select i.*,
             row_number() over (partition by customer_id order by invoice_date desc) as seqnum
      from invoices i
     ) i
     on c.customer_id = i.customer_id
where i.seqnum in (1, 2)
group by c.customer_id;  -- other columns are not needed because `customer_id` is unique