sql - 使用 t-sql 按升序获取最后 3 行?

标签 sql sql-server t-sql

CommentID   Name       Replies                             OrderID
313         Ed         dlfkndl sdknldgf dlffdg               496
313         James      sdsflsdf snflsf sfnslf sfnklsdf       499
313         Jeff       sdsflsdf snflsf sfnslf sfnklsdf       500
313         Alan       sdsflsdf snflsf sfnslf sfnklsdf       501
313         William    sdflksnfdlsk sdfknslnf slfnks         503

上面有一个示例表,该表按 [OrderID] 升序排列。我想取最后一个 表的 3 行也按升序排列,如下所示。

CommentID   Name       Replies                              OrderID
313         Jeff       sdsflsdf snflsf sfnslf sfnklsdf        500
313         Alan       sdsflsdf snflsf sfnslf sfnklsdf        501
313         William    sdflksnfdlsk sdfknslnf slfnks          503

在 T-SQL 中执行此操作的确切语法是什么?谢谢... 我尝试想出这个方法,但仍然无法按 asc 顺序获取最后 3 行。

SqlCommand cmd = new SqlCommand("SELECT * FROM [RepTab] WHERE [OrderID] > (SELECT MAX([OrderID]) - 3 FROM [RepTab] WHERE [CommentID]='" + Id + "') ", con);

最佳答案

您还可以使用公用表表达式编写查询:

With CTE as
( select row_number() over ( partition by CommentID order by OrderID desc) as rownum,
         CommentID,
         Name,
         Replies,
         OrderID
  From reptab
 ) 
 select  CommentID,
         Name,
         Replies,
         OrderID
 from CTE 
 where rownum <=3
 and CommentID = 313
 order by OrderID asc

关于sql - 使用 t-sql 按升序获取最后 3 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860273/

相关文章:

SQL 如何在连接中使用 distinct on 和 count 函数

sql-server - Dapper:无法解析 float (解析列时出错)

sql-server - 需要在 SSIS 中附加 excel 文件

sql - 如何在SQL查询中连接两个表而不重复

sql - 如何跟踪列中发生的更改数量? T-SQL-SQL Server

sql - 夏令时和 UTC 时间

php - 帮助处理 SP 和 UDF?

sql - SQL Server 2005在远程计算机上执行exe或连接到服务器应用程序

sql - 更新 varchar 中的最后 2 个字符

c# - 防止已经登录的用户登录 C#