Критерии гибернации: вложенный подзапрос (выберите * из (вложенные результаты))
У меня есть сырой SQL-запрос, который мне нужно написать в критерии гибернации.
Необработанный SQL-запрос у меня есть:
SELECT
*
FROM
(
SELECT
*
FROM
Table t1
ORDER BY Sort1 DESC, Sort2 DESC, Sort3 DESC
)
GROUP BY Age
ORDER BY Sort1 DESC, Sort2 DESC, Sort3 DESC
Что он делает,
- Сортировать результаты таблицы t1 согласно
ORDER BY Sort1 DESC, Sort2 DESC, Sort3 DESC
- Выберите одну строку для каждой возрастной группы
- Сортировать сгруппированные результаты согласно
ORDER BY Sort1 DESC, Sort2 DESC, Sort3 DESC
Примечание) причина, по которой мне нужен Шаг 1) перед Шагом 2), заключается в том, что GROUP BY
извините, не гарантирует порядок, и мне нужно применить строгий порядок, чтобы выбрать одну строку для каждой возрастной группы
У меня есть таблица, как показано ниже: Таблица t1
| ID | Lastname | Firstname | Age | Created_at | Sort1 | Sort2 | Sort3
---------------------------------------------------------------------------
| 1 | Jolie | Angey | 40 | 2011 | 3 | 2 | 1
| 2 | Pitt | Brad | 41 | 2012 | 2 | 1 | 2
| 3 | Smith | Casey | 40 | 2010 | 3 | 1 | 2
| 4 | Smith | Carey | 40 | 2009 | 3 | 2 | 3
---------------------------------------------------------------------------
Результат, полученный из вышеуказанного SQL-запроса, выглядит следующим образом:
| ID | Lastname | Firstname | Age | Created_at | Sort1 | Sort2 | Sort3
----------------------------------------------------------------------------
| 4 | Smith | Carey | 40 | 2009 | 3 | 2 | 3
| 2 | Pitt | Brad | 41 | 2012 | 2 | 1 | 2
Похоже, что DetachedCriteria - это путь вперед, и мы увидели некоторые решения, в которых используются результаты от DetachedCriteria, подающие предложение where, но не сразу после FROM.
Таким образом, я сделал подзапрос с использованием DetachedCriteria, но не уверен, куда идти о выполнении Criteria..
DetachedCriteria subQuery = DetachedCriteria.forClass(Some.class, "a")
.addOrder(Order.desc("a.Sort1"))
.addOrder(Order.desc("a.Sort2"))
.addOrder(Order.desc("a.Sort3"));
// stuck from below... :(
Criteria criteria = hibernateSession.createCriteria(??)
.add(Projections.groupProperty("Age"))
Я был бы очень признателен за понимание того, как это сделать. Заранее спасибо:)