2017-03-07 5 views
1

Wie kann ich die Funktion row_number() mit einer über Partition auf MS ACCESS konvertieren? Was ich erreichen will ist:(Ms Access) Row_Number() Über Partition

aus dieser Tabelle:

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 

Zu diesem Ausgang, nur die Top-3 neueste jeder ID zeigt:

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

auf SQL Server, i kann dies unter Verwendung des folgenden Codes erreicht werden:

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; 

Antwort

0

Anything Verwenden des OVER-Klausel ist etwas wie eine Windowing-Funktion bekannt. Leider MS Access haben keine Unterstützung für Windowing functions.The einfachste Lösung in diesem Fall sein kann :(

+0

Sie haben keine Ahnung, wie ich es VBA Code umsetzen können? – user1688194

4

Betrachten wir eine Zählung korrelierte Unterabfrage in VBA-Code zu unterstützen, die in jedem RDBMS arbeiten können.

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

es könnte einfacher und schneller sein Top verwenden n - wie Sie selbst erwähnen:

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