Критерии гибернации: вложенный подзапрос (выберите * из (вложенные результаты))

У меня есть сырой 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

Что он делает,

  1. Сортировать результаты таблицы t1 согласно ORDER BY Sort1 DESC, Sort2 DESC, Sort3 DESC
  2. Выберите одну строку для каждой возрастной группы
  3. Сортировать сгруппированные результаты согласно 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"))

Я был бы очень признателен за понимание того, как это сделать. Заранее спасибо:)

0 ответов

Другие вопросы по тегам