【问题标题】:Select whole table but unique value in a specific column选择整个表但特定列中的唯一值
【发布时间】:2012-02-06 06:12:18
【问题描述】:

请帮助我解决我在工作中遇到的问题。我正在使用 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 |

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

我已经尝试过:

Select distinct postedby, date, comment

但没有用,因为我理解每一列都有不同的作品,所以如果在 2 行中postedby 相同但评论不同,它会将其视为不同

我已经尝试过:

Select postedby,date,comment group by postedby(不用担心 from 子句) 给我错误或聚合,所以我尝试了 select postedby,min(date) group by postedby - 当然可以,但我无法获得评论。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 哦,抱歉,我刚刚注意到了,正如我试图澄清的那样,这与我正在使用的函数无关,或者如果我没有写“FROM table_name”,那是关于使用聚合函数,并希望获得不需要聚合乐趣的列值。 ;) 答案已经出来了 ;) 但感谢您的努力和时间 :)
    【解决方案2】:

    看来今天是 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
    

    【讨论】:

    • 一个问题,我知道这适用于oracle,但适用于sql server?
    • @UdoFholl - 这将适用于 SQL Server 2005+,所以当 op 澄清正在使用的 SQL Server 版本时,我将保留我的 +1
    • @Lamak 好吧,让我们希望它是 2005+ 然后:D
    • @BassamMehanni:你不需要加入。您可以将包含所有需要的列的 row_number() 函数放入单个选择中,然后用 select * from ( ... ) where rownumber = 1 包装它(其中 ... 是来自 about 的内部选择)。这会更快,因为该表只会被扫描一次。
    • @UdoFholl:该语句适用于 Oracle、PostgreSQL、DB2、Sybase 和 Teradata。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多