2012-10-05 11 views
7

Mam więc dwie tabele, konto i fakturę, są one powiązane kluczem podstawowym z tabeli kont, tj. account.key i invoice.key.Wybierz drugą najwyższą wartość na odrębny klucz obcy

Chcę wybrać account.accountnumber, invoice.invoicedate, invoice.invoiceamount na drugi najnowszy fakturat z każdego konta.

Wszelkie pomysły?

Tak, aby zaznaczyć wszystkie faktury i odpowiadające im numery kont:

select a.accountnumber, i.invoicedate, i.invoiceamount 
from account a 
join invoice i on (a.key = i.key) 

i, aby wybrać drugi ostatnią fakturę od całej tabeli faktury:

select MAX(invoicedate) from INVOICE i where invoicedate NOT IN (SELECT MAX(invoicedate) from i 

Ale jak mogę drugi ostatni faktura, za konto z tabeli faktury, wraz z numerem konta z tabeli rachunków?

Z góry dziękuję.

Odpowiedz

6

Stosując funkcję ROW_NUMBER() okienkowy ...

select accountnumber, invoicedate, invoiceamount 
from 
(
    select a.accountnumber, i.invoicedate, i.invoiceamount, 
     row_number() over (partition by a.accountnumber order by invoicedate desc) rn 
    from account a 
     join invoice i on a.[key] = i.[key] 
) v 
where rn = 2 
-1

spróbować wykorzystać to:

select a.accountnumber, i.invoicedate, i.invoiceamount 
from account a 
join invoice i on a.[key] = i.[key] 
and i.invoicedate in 
(select max(invoicedate) as secondmaxdate from invoice where invoicedate not in 
(select max(invoicedate) as maxdate from invoice group by [key]) 
group by [key]) 
+0

Jest to nie tylko przez zawiłe, to nie będzie działać, jeśli termin faktury akcje. – podiluska