Спящий режим: как выбрать последние N строк в порядке возрастания идентификатора? (в одном запросе)

Спящая версия: 5.2

Я пытаюсь использовать подзапросы и использовать setMaxResults (int).

session.createQuery(
"FROM ( SELECT * FROM tickets ORDER BY id DESC limit 3) sub ORDER BY id ASC"
);

Однако подзапросы HQL могут встречаться только в предложениях select или where, а limit нельзя использовать в спящем режиме.

Как я могу сделать это в спящем режиме?


Обновление - чтобы было понятно

Например, имеется 10 записей данных от id=1 до id=10.

Я хочу выбрать последние 3 данных в порядке возрастания идентификатора с помощью только одного запроса + без дальнейшей обработки данных.

Результат от db будет от id=8 до id=10

Спасибо.


person Pika    schedule 18.10.2016    source источник


Ответы (2)


Предполагая, что у вас есть идентификаторы от 1 до 10, и вам нужен последний N=3.

Принял ваш подход

SELECT * FROM tickets ORDER BY id DESC

вернет идентификаторы в порядке от 10 до 1. Затем вы хотите получить последние N=3 в порядке возрастания. Это означает, что вам нужны идентификаторы от 3 до 1 в порядке возрастания.

Что не так с выбором первых N идентификаторов в порядке возрастания?

session.createQuery(
    "FROM tickets ORDER BY id ASC"
).setMaxResults(n);
person SubOptimal    schedule 18.10.2016
comment
Спасибо за ваш ответ. Это не то, что я имею в виду. Я обновил вопрос, чтобы прояснить его. - person Pika; 18.10.2016

Вы можете использовать Query setFirstResult(int startPosition), Query setMaxResults(int maxResult) для его реализации. Обычно используется в пагинации.

Оппортунистический, вы можете получить первые 3 записи здесь по убыванию, поэтому вы можете использовать только Query setMaxResults(int maxResult).

person Liping Huang    schedule 18.10.2016
comment
Я думаю, что это работает только с постоянной базой данных. например, QUERY.setFirstResult(6).setMaxResults(3). Я вас неправильно понял? В случае динамической базы данных возможно ли получить int startPosition без дополнительного запроса? - person Pika; 18.10.2016