7

したがって、アカウントと請求書の2つのテーブルがあり、それらはアカウントテーブルの主キーによってリンクされています。account.keyとinvoice.key。

各アカウントから 2 番目に新しい請求日に対して、account.accountnumber、invoice.invoicedate、invoice.invoiceamount を選択したいと考えています。

何か案は?

したがって、すべての請求書とそれに対応するアカウント番号を選択するには:

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

請求書テーブル全体から 2 番目に新しい請求書を選択するには、次のようにします。

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

しかし、請求書テーブルからアカウントごとに 2 番目の最新の請求書と、アカウント テーブルからのアカウント番号を取得するにはどうすればよいでしょうか。

前もって感謝します。

4

2 に答える 2

6

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
于 2012-10-05T10:42:22.743 に答える
-1

これを使ってみてください:

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])
于 2012-10-05T11:26:16.657 に答える