代码之家  ›  专栏  ›  技术社区  ›  Vivek Nuna Chetan sabhaya

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

  •  -6
  • Vivek Nuna Chetan sabhaya  · 技术社区  · 7 年前

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

    我想得到最后一行,但我不能申请 order by .

    以下查询未提供所需的结果。

    select top 1 from SampleTbl order by columnName desc
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Zohar Peled    5 年前

    数据库表本质上是未排序的。没有 最后一行 在表格中。

    如果有聚集索引,则记录的存储顺序与聚集索引相同,但这并不意味着这是行的顺序,除非指定 order by 子句中,任何数据库都不能保证所述查询返回的行的顺序。

    从…起 Wikipedia page on tables (重点矿山):

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

    参见Aaron Betrand的 Bad habits to kick : relying on undocumented behavior ,标题为“无订单订购人”的段落:

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