7

如何选择表中的所有但最后一行?

我知道我可以选择最后一个,SELECT item FROM table ORDER BY id DESC LIMIT 1但我想选择除最后一个以外的所有。

我怎样才能做到这一点?

选择一定数量并使用ASC将不起作用,因为我不知道有多少行。

我想过做一个行数并取那个数量并选择那个-1并使用ORDER BY id ASC但是有没有更简单的方法?

谢谢。

4

5 回答 5

12

如果 Id 是唯一的,你可以这样做:

SELECT ...
FROM MyTable
WHERE Id < (SELECT MAX(Id) FROM MyTable)
于 2013-10-19T19:41:31.513 回答
10

最简单的方法是丢弃应用程序中的行。您可以使用计算的限制在 SQL 中执行此操作。计算为(SELECT COUNT(*) FROM T) - 1

或者:

SELECT *
FROM T
EXCEPT
SELECT TOP 1 *
FROM T
ORDER BY id ASC

不包括最后一行。

于 2013-10-19T19:38:02.230 回答
1

像这样的东西应该工作

 select * 
 from table
 where id not in (SELECT id FROM table ORDER BY id DESC LIMIT 1)
于 2013-10-19T19:39:53.117 回答
0

由于 LIMIT 无法获取参数,您有两个选择 - 构建动态查询(有关更多详细信息,请参阅这篇文章 -将 LIMIT 作为参数传递给 MySQL sproc)或在您的应用程序中过滤它。

于 2013-10-19T19:40:32.460 回答
0

如果您对按 排序的结果感到满意DESC,那么您还可以使用以下任何答案:如何跳过 sql 查询中的前 n 行来实现这一点。

这种方法也可以很容易地推广到“选择除最后 N 行之外的所有行”。

不幸的是,它似乎没有一个单一的标准化语法,每个 DBMS 都有自己的。

例如,在我的回答中,我涵盖了 PostgreSQL、SQLite 和 MySQL。例如,在 PostgreSQL 中,您可以OFFSET不使用LIMIT

SELECT item FROM table ORDER BY id DESC OFFSET 1

尽管没有子查询,但似乎没有一种超级好的方法来保持订单:SQL LIMIT,但从最后

于 2021-12-06T11:24:23.913 回答