我有一个包含多个计算机名称和连接日期的表。这是一个例子。
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中使用,是否可以使用临时表来完成这项工作?
答案 0 :(得分:6)
SELECT *
FROM (
SELECT ID, Computer, User, Date,
RANK() OVER ( PARTITION BY Computer ORDER BY Date DESC) AS RowNumber
FROM YourTable)
WHERE RowNumber <= 3
编辑:哦......这是访问。
我无权访问......呃...访问,但可以试试这个吗?
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
答案 1 :(得分:1)
你需要以某种方式对它们进行分区/排序,这可能与数据库相关。如果您指明您正在使用的数据库,我们可以提供更具体的帮助。
例如,对于SQL Server,它看起来像这样
SELECT
Computer
,User
,Date
,LoginRank
FROM
(SELECT
Computer
,User
,Date
,RANK() OVER (PARTITION BY Computer ORDER BY Date DESC) as LoginRank
FROM
Logins)
WHERE
LoginRank in (1,2) -- take the top 2
ORDER BY
Computer
,LoginRank ASC