0

我目前正在开发一个新闻网站。所以这就是问题所在。我想在 TOP 3 中选择第 2 行和第 3 行。

SELECT TOP 3 * FROM News ORDER BY Date DESC; 

我想删除第一行,只返回第二行和第三行。

任何人都可以帮忙吗?

4

5 回答 5

1

您也可以使用窗口函数一般地执行此操作:

select n.*
from (SELECT n.*, row_number() over (order by date desc) as seqnum
      FROM News n
     ) n
where n.seqnum >= 2 and n.seqnum <= 3;

我只是将其作为一般解决方案提供。您还可以使用dense_rank()而不是row_number().

于 2013-08-05T00:22:57.833 回答
1

尝试这个:

SELECT TOP 2 FROM
( SELECT TOP 3 * FROM News ORDER BY Date DESC ) xx
ORDER BY Date

SQLFiddle: http ://www.sqlfiddle.com/#!3/dbb7e/5

于 2013-08-04T23:57:37.323 回答
0
Select top 2 * from News cross apply (select top 3 from news order by date desc)x
于 2013-08-05T00:37:41.893 回答
0

如果您知道没有两个日期会相同,您可以添加

where date not in (select max(date) from News)

或者您可以查看rowid您是否知道第一项的 rowid=0,例如,如果您使用初始查询的结果创建了一个临时表。

于 2013-08-05T00:01:26.767 回答
0

我假设,您通过按日期降序排序以某种方式知道您的前 3 条新闻是什么。因此,您应该使用带有 OFFSET [For sqlite] 的 LIMIT 子句

SELECT * FROM News ORDER BY Date DESC LIMIT 2 OFFSET 1;
于 2013-08-05T00:03:08.700 回答