【问题标题】:SQL count distinct values for records but filter some dupsSQL 计算记录的不同值,但过滤一些重复
【发布时间】:2012-05-01 17:30:48
【问题描述】:

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

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

【问题讨论】:

  • 能否请您展示您的表结构、示例数据、所需结果以及您可能已经尝试过的任何查询?根据您的实际规格工作将比从一个单词问题中从头开始创建解决方案更快、更容易。

标签: sql sql-server-2008 distinct survey


【解决方案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 

【讨论】:

    【解决方案2】:

    也许不是最有效的查询,但是呢:

    按用户 ID 从 my_table 组中选择用户 ID,最大值(调查日期)

    然后您可以在同一个表上进行内部连接以获取更多数据。

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2020-02-18
      • 1970-01-01
      相关资源
      最近更新 更多