SQL计算记录的不同值,但过滤一些重复

时间:2012-05-01 17:30:48

标签: sql sql-server-2008 distinct survey

我有一份MS SQL 2008调查回复表,我需要制作一些报告。该表非常基础,它有一个自动编号键,一个响应者的用户ID,一个日期,然后是每个单独问题的一堆字段。大多数问题都是多项选择,响应字段中的数据值是该选择的短变量文本表示。

我需要做的是计算每个选择选项的不同响应的数量(即问题1,10个人回答A,20回答B,等等)。这不是太复杂。然而,扭曲是有些人多次进行调查(因此他们将拥有相同的用户ID字段)。对于这些回复,我只应在报告中包含最新数据(基于调查日期字段)。对于那些拥有多个记录的用户,排除旧调查记录的最佳方法是什么?

2 个答案:

答案 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)

然后您可以在同一个表上进行内部联接以获取其他数据。