16

Transact-SQL 有一个方便的SELECT TOP 4 [whatever] FROM.........

我想做一个 SELECT 查询,返回表中的最后一个“n”条目,而不是第一个。

这是我用来返回表中输入的前四个项目的查询,使用 SELECT TOP:

sql = "SELECT TOP 4 [news_title], [news_date_added], [news_short_description],
[news_ID] FROM [Web_Xtr_News] WHERE ([news_type] = 2 OR [news_type] = 3) AND
[news_language] = '" + Language + "' ORDER BY [news_ID] ASC"

我需要返回最后四个。

4

5 回答 5

38

将表格的顺序从 更改ASCDESC

于 2012-05-17T11:30:00.803 回答
21

正是这样:http ://www.sqlfiddle.com/#!3/6c813/1

with bottom as(  
  select top 4 *
  from tbl
  order by n desc
)
select * 
from bottom
order by n

数据源:

|  N |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |

输出:

|  N |
|----|
|  7 |
|  8 |
|  9 |
| 10 |
于 2012-05-17T13:22:44.060 回答
8

继续使用 TOP,并颠倒顺序:

SELECT TOP 4 [news_title],
             [news_date_added],
             [news_short_description],
             [news_ID]
FROM   [Web_Xtr_News]
WHERE  ([news_type] = 2
         OR [news_type] = 3)
       AND [news_language] = @Language
ORDER  BY [news_ID] DESC

(当然,它被重写为使用参数。您的原始版本容易受到SQL 注入的攻击。)

于 2012-05-17T11:29:49.593 回答
1

您可以通过在查询末尾使用DESC而不是来反转排序。ASC

于 2012-05-17T11:29:54.253 回答
0

从列表中选择批次的一种快速方法是创建一个唯一标识符,如(ROW ID)作为(1、2、3 等)并创建一个嵌套查询。

Select *
from
(select
   row_number() as id
   ,column1
   ,column2
from
  table1
)as D
where D.id (<>=! between)
于 2021-09-29T13:31:35.683 回答