0

我有一个 MS SQL 2008 调查响应表,我需要生成一些报告。该表相当基本,它有一个自动编号键、一个响应人的用户 ID、一个日期,然后是每个单独问题的一堆字段。大多数问题都是多项选择,响应字段中的数据值是该选择的简短 varchar 文本表示。

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

4

2 回答 2

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 
于 2012-05-01T17:49:02.503 回答
0

也许不是最有效的查询,但怎么样:

从 my_table 组中选择 userid, max(survey_date) by userid

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

于 2012-05-01T17:44:25.003 回答