Таблица сортировки спящего режима на основе максимального года и максимального месяца и группировка по идентификатору с использованием критериев

У меня возникли трудности с представлением этого запроса, который я пишу для выбора строк максимального месяца и максимального года из заданного «uid». У меня есть 6 данных, в которых 3 данных имеют uid «4», а другие 3 данных имеют uid «5». Я хочу получить данные о максимальном месяце и максимальном годе как из uid 4, так и из 5. Вот мой критерий запроса. Я получаю этот результат.

Размер списка результатов: 2
uID: 5 nID: cdf Месяц: 11 Год: 2012
uID: 4 nID: f58 Месяц: 10 Год: 2012

Но когда я меняю год uid с 2012 на 2013, он возвращает только строку uid 4.

DetachedCriteria maxYearQuery = DetachedCriteria.forClass(Demo.class);
        ProjectionList yearProj = Projections.projectionList();
        yearProj.add(Projections.max("contextYear"));
        yearProj.add(Projections.max("contextMonth"));
        yearProj.add(Projections.groupProperty("entityUUID"));
        maxYearQuery.setProjection(yearProj);

    Criteria crit = session.createCriteria(Demo.class);
            crit.add(Subqueries.propertiesIn(new String[] {"contextYear","contextMonth", "entityUUID"}, maxYearQuery));
            crit.addOrder(Order.desc("entityUUID"));

мой стол выглядит так..

>

uID: 4 nID: cdf Месяц: 10 Год: 2012

uID: 4 nID: f58 Месяц: 9 Год: 2012

uID: 5 nID: f58 Месяц: 8 Год: 2012

UID: 5 nID: f58 Месяц: 11 Год: 2012

uID: 5 nID: f58 Месяц: 10 Год: 2013

uID: 4 nID: f58 Месяц: 9 Год: 2012

Мне нужна 1-я и 5-я запись из моей базы данных. Я застрял на этом этапе. Пожалуйста, дайте некоторые рекомендации, чтобы получить запись по группировке.

Заранее спасибо.


person Jimmy    schedule 08.02.2015    source источник


Ответы (2)


Вы хотите, чтобы этот тип запроса

Выберите Max(month),Max(Year) из группы Demo по uid;

person Dheeraj    schedule 08.02.2015
comment
Спасибо Дирадж и Да, я хочу такой же запрос. Приведенный выше запрос работает хорошо, но за тот же год. Когда я меняю год, он возвращает только один результат. - person Jimmy; 08.02.2015
comment
Он должен возвращать весь объект, а не только максимальный месяц и год. - person Jimmy; 08.02.2015

я нахожу решение вашей проблемы

Предположим, имя таблицы — Demo, и в ней три столбца uid, месяц, год.

Запрос:

выберите a.uid,a.year,max(month) из Demo a внутреннее соединение (выберите uid,max(year) m из группы Demo на 1) d в группе a.uid=d.uid и a.year=dm на 2;

Он будет работать нормально, проверьте его и дайте мне отзыв

person Dheeraj    schedule 18.02.2015
comment
Привет, Дирадж, спасибо за вопрос. Однако я хотел, чтобы это использовалось только по критериям. - person Jimmy; 23.02.2015