2013-09-11 5 views
0

У меня есть таблица с вопросами и ответами и sessionid.SQL Server Group by clause - Простые материалы

Иногда одно и то же лицо (sessionid) будет отвечать на один и тот же вопрос более одного раза и хранится в таблице.

Содержание 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 строк.

Должно быть простым, но я havent использовал SQL в течение многих лет.

ответ

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