2017-06-06 3 views
0

ich habe zwei Tabellen Customers-Tabelle und INVOICE TabelleDie beiden letzten Datensatz für jeden Benutzer in derselben Zeile Postgresql

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) 
); 

Wie kann ich für jeden Kunden Die letzten beiden Rechnungsbeträge erhalten (in derselben Zeile).

Antwort

0

Eine Methode ist row_number() zu verwenden:

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 
Verwandte Themen