我有一个包含多个计算机名称和连接日期的表。这是一个例子。
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
我希望只能为每台计算机选择最后 2 或 3 个连接。另外,我无法修改表格。有人有想法吗?
谢谢
编辑:这是一个 MS Access mdb 文件
EDIT": 由于 RANK OVER() 不能在 MS Access 中使用,是否可以使用临时表来完成这项工作?
最佳答案
SELECT *
FROM (
SELECT ID, Computer, User, Date,
RANK() OVER ( PARTITION BY Computer ORDER BY Date DESC) AS RowNumber
FROM YourTable)
WHERE RowNumber <= 3
编辑:哦...这是 Access。
我无权 Access ...呃... 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
关于sql - 如何选择 WHERE .. IN 子句中每个元素的前 n 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6522748/