Sql 选择“按列分组”的最大值

Sql 选择“按列分组”的最大值,sql,sql-server,group-by,rank,Sql,Sql Server,Group By,Rank,我有一个带列的表问题 QuestionId, Question, AnswerId, Answer, AnsVotes(integer), AnsDate(Date) 一个QuestionId可以有多个AnswerId,因此可以有多个条目应答ID是唯一的 我如何过滤记录以获得QuestionId,而AnswerId具有最大ansvowers?如果多个条目的ansvows相同,则获取包含最新AnsDate的行(这是一个日期列) 您想在不打领带的情况下获得顶级条目。为此,请使用顶部(1): sel

我有一个带列的表
问题

QuestionId, Question, AnswerId, Answer, AnsVotes(integer), AnsDate(Date)
一个
QuestionId
可以有多个
AnswerId
,因此可以有多个条目<代码>应答ID是唯一的


我如何过滤记录以获得
QuestionId
,而
AnswerId
具有最大
ansvowers
?如果多个条目的
ansvows
相同,则获取包含最新
AnsDate
的行(这是一个日期列)

您想在不打领带的情况下获得顶级条目。为此,请使用顶部(1):

select top(1) *
from question
order by ansvotes desc, ansdate desc;
或者你想得到每个问题的最佳答案?然后,您将使用
行编号对记录进行排序

select *
from
(
  select q.*, row_number() over (partition by questionid 
                                 order by ansvotes desc, ansdate desc) as rn
  from question q
) answers
where rn = 1;

在sql查询中搜索“have”,这允许对聚合值进行筛选。你还需要努力解决你的问题。你累了什么?在我看来,这是一个糟糕的设计:你在为每一个可能的答案复制问题数据。您应该将答案移动到另一个表中,并添加一个指向问题的外键如果AnswerId是唯一的,我宁愿将此表称为
答案
,而不是
问题
。此外,表中还会重复一个问题(相同的ID,希望是相同的文本)。那不好。请将此作为单独的问题表。谢谢您的建议。将表格分为问题和答案