Проблема с получением последней записи строки из базы данных SQL - PullRequest
0 голосов
/ 27 августа 2011
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 ]

1 голос
/ 27 августа 2011

Порядок сортировки строки будет R1 -> R10 -> R2.Что вы ожидали?

Если вам нужна сортировка чисел, тогда вам понадобится это

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

Не ожидайте отличной производительности, если вы дали много строк, потому что индекс наRoomID будет игнорироваться

Другие опции:

  • Номера пэдов (согласно ответу Ральфа Шиллингтона)
  • Сохраните число как int и добавьте 'R' на дисплеевремя (или как вычисляемый столбец)
  • Использовать мой CAST / REPLACE в качестве вычисляемого индексированного столбца в таблице
1 голос
/ 27 августа 2011

Если RoomID не является числовым типом данных (как я полагаю, поскольку данные «R1»), то используется алфавитно-цифровая сортировка.

R9> R1 и R9> R10

, поскольку сравнивается только начало строк (здесь: 2 символа).

0 голосов
/ 27 августа 2011

Вам придется обнулять свои данные, если вы хотите получить символы, подобные их числам. R01 R02 R03 R04 R05 ... R10 даст вам результат, который вы ищете. Однако теперь, когда вы идете по этому пути, вы можете сделать вывод, что ваша модель данных должна быть переосмыслена.

0 голосов
/ 27 августа 2011

попробуйте

select RoomID  from RoomQuantity order by RoomID  desc limit 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...