我目前正在开发一个新闻网站。 所以这就是问题所在。我想在TOP 3中选择第2和第3行。
SELECT TOP 3 * FROM News ORDER BY Date DESC;
我想删除第1行,只返回第2行和第3行。
有人可以帮忙吗?
答案 0 :(得分: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
答案 1 :(得分: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()
确保从第二个日期(如果该日期有两个以上的项目)获取所有内容。
答案 2 :(得分:0)
如果你知道没有两个日期相同,你可以添加
where date not in (select max(date) from News)
或者,如果您知道第一项将具有rowid = 0,则可以查看rowid
,例如,如果您创建了包含初始查询结果的临时表。
答案 3 :(得分:0)
我假设,你以某种方式通过按日期降序排序知道你的前3个新闻是什么。 因此,您应该将LIMIT子句与OFFSET [For sqlite]
一起使用SELECT * FROM News ORDER BY Date DESC LIMIT 2 OFFSET 1;
答案 4 :(得分:0)
Select top 2 * from News cross apply (select top 3 from news order by date desc)x