3

我正在处理的 SQL 查询有一些问题,很抱歉,我没有任何正在进行的工作可显示,因为到目前为止我尝试过的任何事情都没有很好的结果,所以我希望有人能够指出我正确的方向。

表:

电脑:

[SN][PN][ComputerName][Model][OS][Architecture][RAM][CPU]

登录:

[SN][Username][Timestamp]

信息:

它以这种方式工作,每次用户登录到计算机时,计算机信息都会更新到计算机表中,并且用户名和时间戳会插入到登录表中。

结果

我试图达到的结果如下:

[SN][PN][ComputerName][Model][OS][Architecture][RAM][CPU]**[Primary User]**

每台计算机应该只有一行

主要用户字段应基于 5 次最新登录,并且是这 5 次中重复次数最多的用户名。

所以我认为这就结束了,我希望这里的人至少能够为我指出正确的方向,因为谷歌必须提供的每个结果现在都显示为红色。

4

2 回答 2

3

这有点 RBAR,但应该像下面这样。

SELECT [SN],
       [PN],
       [ComputerName],
       [Model],
       [OS],
       [Architecture],
       [RAM],
       [CPU],
       O.[Username] AS [Primary User]
FROM   Computers C
       OUTER APPLY (SELECT TOP 1 [Username]
                    FROM   (SELECT TOP (5) *
                            FROM   Logons L
                            WHERE  L.[SN] = C.[SN]
                            ORDER  BY [Timestamp] DESC) Last5Users
                    GROUP  BY [Username]
                    ORDER  BY Count(*) DESC,
                              Max([Timestamp]) DESC) O 
于 2012-09-26T17:46:25.583 回答
0

看起来您想定义一个计算列。看看这个问题:在 SQL Server 2008 中创建计算列

于 2012-09-26T17:31:34.740 回答