如何从SQL Server中的表中获取最后一行?

viv*_*una -6 sql-server

我有一个表,它只有一列varchar.

我想得到最后一排,但我无法申请order by.

以下查询未提供所需结果.

select top 1 from SampleTbl order by columnName desc
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 5

数据库表本质上是未分类的.表中没有最后一行.

如果存在聚簇索引,则记录的存储顺序与聚簇索引的顺序相同,但这并不意味着行的顺序 - 除非order by在查询中指定子句,否则没有数据库保证返回的行的顺序通过所述查询.

维基百科页面上的表格(强调我的):

就数据库的关系模型而言,表可以被认为是关系的方便表示,但两者并不是严格等同的.例如,SQL表可能包含重复的行,而true关系不能包含重复的元组.类似地,表示为表意味着对行和列的特定排序,而关系明确地是无序的.但是,除非在查询表的SELECT语句中指定了ORDER BY子句,否则数据库系统不保证行的任何排序.

另请参阅Aaron Betrand的糟糕习惯:依靠无证行为,标题为"没有ORDER BY订购"的段落:

...我想说清楚:除非你使用ORDER BY子句,否则排序是任意的.在没有ORDER BY的情况下,您永远不应该依赖于在查询中观察到的顺序 - 如果您真的不关心结果返回的顺序,那么您应该只发出没有ORDER BY子句的查询.在这种情况下,您可以想象每次行都会以不同的随机顺序返回,即使事实并非如此(随机具有完全独立于任意的含义,但就像我说的那样,想象一下).

  • 值得注意的是,这不是一个不常见的场景 - 并行处理结果几乎可以保证它们将按照它们可用的顺序返回,除非指定了ORDER BY (3认同)