SQL Server Group by子句 - 简单的东西

时间:2013-09-11 09:32:44

标签: sql sql-server

我有一个包含问题和答案以及sessionid的表格。

有时同一个人(sessionid)会回答同一个问题超过1次,并存储在表格中。

qapp_answer表格内容如下所示:

Id, SessionID, QNumber, Qanswer
72     11         1       3
73     11         1       4
74     11         2       1
75     11         2       3
76     11         3       1

所以,我只希望每次Qnumber显示一次(总共3行),基本上只是使用他们最新的答案进行显示(Qanswer)。

这是到目前为止的代码:

select Qnumber, Qanswer 
from qapp_answers
where sessionid = 11
group by QNumber, Qanswer

它返回5行。

应该很简单,但我多年没用过SQL了。

1 个答案:

答案 0 :(得分:4)

您基本上可以使用ROW_NUMBER()根据指定的组生成序号。下面的查询按QNumber对记录进行分组,并按降序排列ID生成的序号。每个组的最新ID的值为1,因此您需要过滤掉生成值为1的记录。

SELECT ID, SessionID, QNumber, Qanswer
FROM
    (
        SELECT  ID, SessionID, QNumber, Qanswer,
                ROW_NUMBER() OVER (PARTITION BY QNumber ORDER BY ID Desc) rn
        FROM    tableName
        WHERE   SessionID = 11
    ) a
WHERE   a.rn = 1