我有一份MS SQL 2008调查回复表,我需要制作一些报告。该表非常基础,它有一个自动编号键,一个响应者的用户ID,一个日期,然后是每个单独问题的一堆字段。大多数问题都是多项选择,响应字段中的数据值是该选择的短变量文本表示。
我需要做的是计算每个选择选项的不同响应的数量(即问题1,10个人回答A,20回答B,等等)。这不是太复杂。然而,扭曲是有些人多次进行调查(因此他们将拥有相同的用户ID字段)。对于这些回复,我只应在报告中包含最新数据(基于调查日期字段)。对于那些拥有多个记录的用户,排除旧调查记录的最佳方法是什么?
答案 0 :(得分:1)
由于您没有向我们提供您的数据库架构,我不得不做出一些假设,但您应该能够使用row_number来识别用户采取的最新调查。
with cte as
(
SELECT
Row_number() over (partition by userID, surveyID order by id desc) rn,
surveyID
FROM
User_survey
)
SELECT
a.answer_type,
Count(a.anwer) answercount
FROM
cte
INNER JOIN Answers a
ON cte.surveyID = a.surveyID
WHERE
cte.rn = 1
GROUP BY
a.answer_type
答案 1 :(得分:0)
也许不是最有效的查询,但是:
通过userid从my_table group中选择userid,max(survey_date)
然后您可以在同一个表上进行内部联接以获取其他数据。