从SQL数据库中检索最后一行记录的问题

时间:2011-08-27 12:02:28

标签: sql database row record

cmd.CommandText = "SELECT RoomID FROM RoomQuantity A WHERE A.RoomID = (SELECT MAX(RoomID) FROM RoomQuantity)";

cmd.CommandText = "SELECT TOP 1 RoomID FROM RoomQuantity ORDER BY RoomID desc;";

数据库 表:RoomQuantity - 列:RoomID - RoomID中的数据: R1 R2 R3 R4 R5 R6 R7 R8 R9 R10

问题 - 始终检索R9而不是R10

4 个答案:

答案 0 :(得分:1)

如果RoomID不是数字数据类型(我假设,因为数据是“R1”),则使用字母数字排序。

R9> R1 和 R9> R10

因为只比较字符串的开头(这里:2个字符)。

答案 1 :(得分:1)

字符串的排序顺序为R1 - > R10 - > R2。你有什么期望?

如果你想要一个数字排序,那么你需要这个

SELECT TOP 1 RoomID
FROM RoomQuantity
ORDER BY
      CAST(REPLACE(RoomID, 'R', '') AS int) DESC

如果您提供大量行,请不要期望出色的性能,因为RoomID上的索引将被忽略

其他选择:

  • 垫数(根据Ralph Shillington的回答)
  • 将数字存储为int并在显示时添加'R'(或计算列)
  • 将我的CAST / REPLACE用作表格中的计算索引列

答案 2 :(得分:0)

试试这个

select RoomID  from RoomQuantity order by RoomID  desc limit 1;

答案 3 :(得分:0)

如果您希望检索喜欢其数字的字符,那么您必须将数据填零。 R01 R02 R03 R04 R05 ... R10会给你你想要的结果。但是,现在您已经走上了这条道路,您可能会得出结论,您的数据模型应该重新考虑。