【问题标题】:Query to retrieve only record for each user for last date entered [duplicate]查询仅检索每个用户最后输入日期的记录[重复]
【发布时间】:2015-11-17 04:59:56
【问题描述】:

如果我有这样一张桌子:

Username    Comment    Date
-------------------------------    
   X        test1      1-1-2015      
   X        test2      1-3-2015      
   X        test3      1-6-2015      
   Y        test1      1-4-2015      
   Y        test2      1-5-2015      
   Y        test3      1-9-2015

我需要得到如下输出结果

Username    Comment    Date
----------------------------
    X       test3      1-6-2015      
    Y       test3      1-9-2015      

输出:

仅根据最后日期检索 X 和 Y 的记录(获取最后输入日期的用户名和评论)

有没有什么方法可以使用 SQL Server 2014 来获得这样的结果?

【问题讨论】:

  • 欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上很好地格式化和语法突出显示它!
  • 很好的时机 3x 相同的答案 :)

标签: sql sql-server greatest-n-per-group sql-server-2014


【解决方案1】:

您可以使用row_number 选择每个用户名的最新评论

select * from (
  select * , row_number() over (partition by username order by date desc) rn
  from mytable
) t1 where rn = 1

【讨论】:

    【解决方案2】:

    您可以像这样使用 CTE(通用表表达式):

    ;WITH CTE AS
    (
      SELECT
          Username, Comment, [Date],
          RowNum = ROW_NUMBER() OVER (PARTITION BY Username ORDER BY [Date] DESC)
    )
    SELECT
        Username, Comment, [Date]
    FROM 
        CTE
    WHERE
        RowNum = 1
    

    这只会为每个 Username 选择最近的条目

    另外:请注意Date 是 T-SQL 中的保留关键字,它不应用于您自己的列名!尝试使用更有意义的东西——比如CommentDate 或其他东西!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2011-01-25
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      相关资源
      最近更新 更多