同一行中每个用户的最后两条记录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