2012-10-05 23 views
7

Por lo tanto, tengo dos tablas, cuenta y factura, están vinculadas por la clave principal de la tabla de la cuenta, es decir. account.key y invoice.key.Seleccione el segundo valor más alto por clave foránea distinta

Deseo seleccionar account.accountnumber, invoice.invoicedate, invoice.invoiceamount para la segunda fecha de factura más reciente de cada cuenta.

¿Alguna idea?

Así que para seleccionar todas las facturas y sus correspondientes números de cuenta:

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

y para seleccionar la segunda última factura de toda la tabla de facturas:

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

Pero, ¿cómo puedo obtener el segundo más reciente factura, por cuenta de la tabla de facturas, junto con el número de cuenta de la tabla de cuentas?

Gracias de antemano.

Respuesta

6

Mediante el uso de la función de ventanas ... ROW_NUMBER()

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

tratar de usar esto:

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

Esto no sólo es más complicado, no va a funcionar si las fechas de las facturas de las acciones. – podiluska

Cuestiones relacionadas