Я новичок в JOOQ.У меня есть случай, когда мне нужно выбрать строки, которые имеют последнее значение поля отметки времени из таблицы.
Моя таблица разбита по дате события.Поэтому, когда я запрашиваю таблицу, я получаю несколько записей для одного и того же идентификатора.Теперь я не хочу получать много записей для одного и того же идентификатора, вместо этого мне нужно, чтобы была возвращена только одна запись с последним значением поля метки времени.
Используя базовый синтаксис SQL, я могу достичь этого, но не могу достичь его с помощью JOOQ.
SQL:
select *
from abc.student t
inner join (
select id, max(event_date) as MaxDate
from abc.student group by id
) tm on t.id = tm.id and t.event_date = tm.MaxDate ;
Java:
public Iterable<MyClass> fetchMyRecords(Iterable<String> MyIds) {
return dslContext.selectFrom(MYTABLE)
WHERE(MYTABLE.ID.in(List.newArrayList(ids)))
.fetchInto(MyObject.class);
}
Ожидаемые результаты: Как получить List<MyClass>
, который имеет различные MyClass
объекты, и каждый отдельный объект является записью, которая имеет последнее значение метки времени?В моей таблице есть поле с именем timestamp, в зависимости от того, что мне нужно для этого.
Обновить вопрос
Допустим, мне нужно получить список студентов, у которых есть последняя дата событиясо всех перегородок.Ниже приведен мой запрос Jooq, но он возвращает только один объект типа MyStudent.
Вопрос - Как применить ограничения для определенного идентификатора.Учитывая список из n идентификаторов, мне нужно получить n объектов Mystudent, где каждый объект имеет максимальное значение event_date
Ниже приведен запрос, который возвращает только 1 объект
У меня есть еще один вопрос, как мнесделать это без присоединения.Ниже приведен код Jooq, который работает только для одного идентификатора.Но моя функция принимает список идентификаторов и получает записи из таблицы.
public Iterable<MyClass> fetchMyRecords(Iterable<String> MyIds) {
return dslContext.select().from(TABLE)
.where(TABLE.ID.in(Lists.newArrayList(ids)))
.orderBy(TABLE.EVENT_DATE.desc())
.limit(1)
.fetchInto(MyStudent.class); }
Поэтому, учитывая набор из 3 идентификаторов (например), как мне получить 3 объекта класса Mystudent, где каждый объект имеет максимум(event_date) запись.Если я использую лимит, он вернет только первую запись идентификатора.Если я не использую лимит, он вернет все повторяющиеся строки, которые являются старыми для идентификатора.