如何选择表中的所有但最后一行?
我知道我可以选择最后一个,SELECT item FROM table ORDER BY id DESC LIMIT 1
但我想选择除最后一个以外的所有。
我怎样才能做到这一点?
选择一定数量并使用ASC
将不起作用,因为我不知道有多少行。
我想过做一个行数并取那个数量并选择那个-1并使用ORDER BY id ASC
但是有没有更简单的方法?
谢谢。
如何选择表中的所有但最后一行?
我知道我可以选择最后一个,SELECT item FROM table ORDER BY id DESC LIMIT 1
但我想选择除最后一个以外的所有。
我怎样才能做到这一点?
选择一定数量并使用ASC
将不起作用,因为我不知道有多少行。
我想过做一个行数并取那个数量并选择那个-1并使用ORDER BY id ASC
但是有没有更简单的方法?
谢谢。
如果 Id 是唯一的,你可以这样做:
SELECT ...
FROM MyTable
WHERE Id < (SELECT MAX(Id) FROM MyTable)
最简单的方法是丢弃应用程序中的行。您可以使用计算的限制在 SQL 中执行此操作。计算为(SELECT COUNT(*) FROM T) - 1
。
或者:
SELECT *
FROM T
EXCEPT
SELECT TOP 1 *
FROM T
ORDER BY id ASC
不包括最后一行。
像这样的东西应该工作
select *
from table
where id not in (SELECT id FROM table ORDER BY id DESC LIMIT 1)
由于 LIMIT 无法获取参数,您有两个选择 - 构建动态查询(有关更多详细信息,请参阅这篇文章 -将 LIMIT 作为参数传递给 MySQL sproc)或在您的应用程序中过滤它。
如果您对按 排序的结果感到满意DESC
,那么您还可以使用以下任何答案:如何跳过 sql 查询中的前 n 行来实现这一点。
这种方法也可以很容易地推广到“选择除最后 N 行之外的所有行”。
不幸的是,它似乎没有一个单一的标准化语法,每个 DBMS 都有自己的。
例如,在我的回答中,我涵盖了 PostgreSQL、SQLite 和 MySQL。例如,在 PostgreSQL 中,您可以OFFSET
不使用LIMIT
:
SELECT item FROM table ORDER BY id DESC OFFSET 1
尽管没有子查询,但似乎没有一种超级好的方法来保持订单:SQL LIMIT,但从最后