0

我有一张桌子,上面有问题和答案以及 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 了。

4

1 回答 1

4

您基本上可以使用ROW_NUMBER()which 根据指定的组生成序列号。下面的查询将记录分组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
于 2013-09-11T09:35:06.727 回答