选择整个表,但在特定列中选择唯一值

时间:2012-01-09 18:03:19

标签: sql sql-server-2005 group-by distinct aggregation

请帮助我解决我在工作中遇到的问题。我正在使用SQL Server,我知道使用游标我可以实现这一点,但我很确定在SQL中使用简单查询有一种方法,但我的大脑灯泡不想打开。让我用一个例子来解释我的问题。

我有一张这样的桌子:

postedby    |   date        |   comment |
1           |   01.01.2012  |   sth sth |
2           |   01.01.2012  |   sth sth |
3           |   01.01.2012  |   sth sth |
2           |   01.01.2012  |   sth sth |
3           |   02.01.2012  |   sth sth |
2           |   03.01.2012  |   sth sth |
2           |   05.01.2012  |   sth sth |

我想要完成的是获取所有帖子,但每个用户都有一个帖子(发布列),日期必须是最新的,当然还要显示评论。

我尝试过:

Select distinct postedby, date, comment

但没有用,因为我理解每个列的不同作品,所以如果在postfrom的两行中相同但注释不同则会将其视为区别

我尝试过:

Select postedby,date,comment group by postedby(不要理解from子句) 给我错误或聚合,所以我试过 select postedby,min(date) group by postedby - 当然有效,但我无法得到评论。

我应该以某种方式使用聚合查询吗?或者我错过了什么?

2 个答案:

答案 0 :(得分:7)

看起来今天是RowNumber功能日!! 如果您需要的是每个帖子的最新日期和评论:

SELECT postedBy, date, comment
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY postedby, ORDER BY date DESC) AS RowNumber, 
             postedBy, date, comment
      FROM MyTable) t 
WHERE RowNumber = 1

答案 1 :(得分:0)

您尝试了min(date)。它将返回唯一值的最小日期。你试过max(date)吗?这会更好。最长日期始终返回最新日期。