SQL统计记录的不同值,但筛选一些DUP
我有一个MS SQL 2008调查响应表,我需要生成一些报告。这个表相当基本,它有一个自动编号键,一个响应者的用户ID,一个日期,然后是每个问题的一组字段。大多数问题都是多项选择题,响应字段中的数据值是该选项的简短varchar文本表示形式SQL统计记录的不同值,但筛选一些DUP,sql,sql-server-2008,distinct,survey,Sql,Sql Server 2008,Distinct,Survey,我有一个MS SQL 2008调查响应表,我需要生成一些报告。这个表相当基本,它有一个自动编号键,一个响应者的用户ID,一个日期,然后是每个问题的一组字段。大多数问题都是多项选择题,响应字段中的数据值是该选项的简短varchar文本表示形式 我需要做的是计算每个选项的不同回答数(例如,对于问题1,10人回答A,20人回答B,以此类推)。这并不太复杂。然而,问题在于,有些人多次接受调查(因此他们会有相同的用户ID字段)。对于这些回答,我只希望在报告中包含最新数据(基于调查日期字段)。对于那些有多个
我需要做的是计算每个选项的不同回答数(例如,对于问题1,10人回答A,20人回答B,以此类推)。这并不太复杂。然而,问题在于,有些人多次接受调查(因此他们会有相同的用户ID字段)。对于这些回答,我只希望在报告中包含最新数据(基于调查日期字段)。对于那些有多个记录的用户,排除旧的调查记录的最佳方法是什么?也许不是最有效的查询,但是关于: 按用户ID从我的表格组中选择用户ID,max(调查日期)
然后,您可以在同一个表上进行内部联接以获取更多数据。由于您没有向我们提供您的DB模式,我不得不做出一些假设,但您应该能够使用行号来识别用户进行的最新调查
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
您能否显示您的表结构、示例数据、所需结果以及您可能已经尝试过的任何查询?按照您的实际规格工作将比从一个单词问题中从头开始创建解决方案更快、更容易。