【问题标题】:Select max value for group by column按列选择最大值
【发布时间】:2017-05-18 07:17:41
【问题描述】:

我有一张桌子Question 有列

QuestionId, Question, AnswerId, Answer, AnsVotes(integer), AnsDate(Date)

一个QuestionId 可以有多个AnswerId,因此有多个条目。 AnswerId 是独一无二的

如何过滤记录以获取QuestionIdAnswerId 的最大AnsVotes?如果多个条目的Ansvotes 相同,则获取具有最新AnsDate 的行(这是一个日期列)。

【问题讨论】:

  • 在 sql 查询中搜索“有”,这允许过滤聚合值。您还需要尝试解决您的问题。你累什么了?
  • 在我看来设计很糟糕:您正在为每个可能的答案复制问题数据。您应该将答案移动到另一个表并添加引用问题的外键
  • 如果 AnswerId 是唯一的,我宁愿将此表称为Answer,而不是Question。此外,您会在表格中重复一个问题(相同的 ID 并且希望是相同的文本)。这不好。改为将其设为单独的问题表。
  • 感谢您的建议。将表格分成问题和答案

标签: sql sql-server group-by rank


【解决方案1】:

您想获得最高条目,而不需要平局。为此使用TOP(1)

select top(1) *
from question
order by ansvotes desc, ansdate desc;

或者您想获得每个问题的最佳答案?然后你会用ROW_NUMBER对你的记录进行排名:

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;

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多