如何在WHERE .. IN子句中选择每个元素的前n个结果

Jac*_*lik 3 sql ms-access

我有一个包含多个计算机名称和连接日期的表.这是一个例子.

ID    Computer         User         Date         
------------------------------------------------
1      O-1234          User1         2010-07-08        
2      O-1234          User2         2010-08-24           
3      O-1234          User2         2010-09-25
4      O-1555          User3         2010-08-24           
5      O-1555          User3         2010-09-25      
Run Code Online (Sandbox Code Playgroud)

我希望能够只为每台计算机选择最后2或3个连接.另外,我无法修改表格.有人有想法吗?

谢谢

编辑:这是一个MS Access mdb文件

编辑":由于RANK OVER()不能在MS Access中使用,是否可以使用临时表来完成工作?

Mic*_*son 6

SELECT *
FROM (
    SELECT ID, Computer, User, Date,
    RANK() OVER ( PARTITION BY Computer ORDER BY Date DESC) AS RowNumber
    FROM YourTable)
WHERE RowNumber <= 3
Run Code Online (Sandbox Code Playgroud)

编辑:哦......这是Access.

我无法访问......呃...访问,但可以试试这个吗?

SELECT
    logins.ID,
    logins.Computer,
    logins.User,
    logins.Date,
    COUNT(*)
FROM
    YourTable logins INNER JOIN
    YourTable Subsequentlogins ON
        logins.Computer = Subsequentlogins.Computer
        AND logins.Date <= Subsequentlogins.Date
GROUP BY
    logins.ID,
    logins.Computer,
    logins.User,
    logins.Date
HAVING COUNT(*) <= 3
Run Code Online (Sandbox Code Playgroud)