SQL查询组按帮助

时间:2010-07-15 06:51:50

标签: sql sql-server sql-server-2005

我有以下数据:

cust  subject  date
Cust1 Subject1 2010-12-31 21:59:59.000
Cust1 Subject1 2010-12-31 21:59:59.000
Cust4 Subject3 2011-02-27 21:59:59.000
Cust5 Subject1 2010-10-31 21:59:59.000
Cust5 Subject2 2010-10-31 21:59:59.000
Cust6 Subject2 2010-10-31 21:59:59.000
Cust6 Subject2 2010-12-31 21:59:59.000

我需要实现以下目标:

  • 按照惯例和主题对它们进行分组
  • 如果有2条记录具有相同的cust和subject,那么我需要返回具有最高日期的记录
  • 如上所述,如果日期相同,则只返回其中的一个。

查询结果应为:

cust  subject  date
Cust1 Subject1 2010-12-31 21:59:59.000
Cust4 Subject3 2011-02-27 21:59:59.000
Cust5 Subject1 2010-10-31 21:59:59.000
Cust5 Subject2 2010-10-31 21:59:59.000
Cust6 Subject2 2010-12-31 21:59:59.000

任何人都可以帮我吗?

我设法完成了2个要求,但不是全部3个。

3 个答案:

答案 0 :(得分:5)

SELECT cust, subject, max([date]) FROM myTable GROUP BY cust, subject;

你真的没有名为date的专栏,对吗? date是一个保留字,这就是为什么在上面的查询中必须用方括号括起来。

答案 1 :(得分:0)

使用ROW_NUMBER() - 如果你之前没有使用过这个和其他分区函数,那么我绝对可以建议你查看它们(特别是ROW_NUMBER())有很多用途。

SELECT cust, subject, date
FROM (
  SELECT cust, subject, date, ROW_NUMBER() OVER (PARTITION BY cust, subject ORDER BY date DESC) AS RN
  FROM <your table>
) SubQuery
WHERE SubQuery.RN = 1

答案 2 :(得分:0)

select cust, subject, max(date) from table group by cust, subject