2017-03-07 18 views
1

MS ACCESSのoverパーティションでrow_number()関数を変換するにはどうすればよいですか? 私が達成したいことは次のとおりです。この表から(Msアクセス)Row_Number()オーバーパーティション

ID | EntryDate 
10 | 2016-10-10 
10 | 2016-12-10 
10 | 2016-12-31 
10 | 2017-01-31 
10 | 2017-03-31 
11 | 2015-01-31 
11 | 2017-01-31 

これを出力するには、各IDの唯一のトップ3の最新示す:SQL Server上

ID | EntryDate 
10 | 2016-12-31 
10 | 2017-01-31 
10 | 2017-03-31 
11 | 2015-01-31 
11 | 2017-01-31 

を、私は次のコードを使用してこれを実現できます。

select T.[ID], 
    T.[AptEndDate], 
from (
select T.[ID], 
     T.[AptEndDate], 
     row_number() over(partition by T.[ID] order by T.[AptEndDate] desc) as rn 
from Table1 as T 
) as T 
where T.rn <= 3; 

答えて

0

何でもOVER句を使用することは、ウィンドウ機能として知られています。残念ながら、MS Accessのは、VBAコードにバックアップすることであってもよい。この場合、ウィンドウイングFunctions.The最も簡単な解決のためのサポートを持っていない:(

+0

私はVBAコードを使用してそれを実装することができますどのように任意のアイデアを持っていますか? – user1688194

4

任意のRDBMSで作業することができ、カウント相関副問合せを考えてみましょう。

select T.[ID], T.[EntryDate] 
from 
(select sub.[ID], 
     sub.[EntryDate], 
     (select count(*) from Table1 c 
      where c.ID = sub.ID 
      and c.[EntryDate] >= sub.[EntryDate]) as rn 
from Table1 as sub 
) as T 
where T.rn <= 3; 
1

上位nを使用する方が簡単かつ迅速であるかもしれない - あなた自身を言及として:

Select T.[ID], T.[EntryDate] 
From Table1 As T 
Where T.[EntryDate] In 
    (Select Top 3 S.[EntryDate] 
    From Table1 As S 
    Where S.[ID] = T.[ID] 
    Order By S.[EntryDate] Desc) 
Order By T.[ID] Asc, T.[EntryDate] Asc