Sql 选择顶部的对面?

Sql 选择顶部的对面?,sql,sql-server,Sql,Sql Server,Transact-SQL有一个方便的从……… 我想做一个SELECT查询,返回表中最后的“n”个条目,而不是第一个条目 这是我将使用SELECT TOP返回表中输入的前4项的查询: 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 [

Transact-SQL有一个方便的
从………

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

这是我将使用SELECT TOP返回表中输入的前4项的查询:

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个

为什么不继续使用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注入的影响)

您可以在查询结束时使用
DESC
而不是
ASC
来反向排序。

将表的顺序从
ASC
更改为
DESC

正是这样的:

数据来源:

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

|  N |
|----|
|  7 |
|  8 |
|  9 |
| 10 |

您不应该构造这样的SQL -使用参数化查询来避免反向操作的风险。请阅读以下内容:您可能会考虑阅读“M $”产生的文档,因为这在这里得到了明确的解释。你还应该尽量避免对你所使用的产品的销售商使用贬义的昵称,这是相当侮辱和幼稚的。愚蠢的论点。如果这是一个标准,他们不能简单地发明一个新的关键字,仍然称之为SQL。仅供参考-Aaron为MS工作,所以你侮辱了他。我们没有足够的上下文来知道注入是不可能的。如果您大量使用SQL,您甚至不应该问这个问题。当然,不同的条款是按照特定的顺序进行评估的——这些都是记录在案的。也许您应该研究一下SQL执行引擎的内部结构。当然,这只会返回前4名,但顺序正好相反?@BaronVonPeterWright-您费心尝试了吗?
WHERE
“执行”在
TOP
之前。因为订购可能很昂贵。@这是设计太糟糕了,这是问题中的一个要求。在不指定顺序的情况下,如何定义无序集合中的“第一个”或“最后一个”?我认为OP的期望是存在类似于
BOTTOM
的东西,与
TOP
相反。如果您有一个索引(例如,
asc
),则不必将记录重新排序到
desc
,只需获取最后一项,这是有意义的。因此,更准确地说:“为什么不继续使用TOP,并颠倒顺序?”——因为它需要*额外的订购,这可能会很昂贵。我明白这是不可能的,只是想回答你的问题。
|  N |
|----|
|  7 |
|  8 |
|  9 |
| 10 |