object Pub_Table : IntIdTable() { val title = varchar("title", 256) } object PubS_Table : IntIdTable() { val tag = varchar("tag", 128) } object PubSC_Table : IntIdTable() { val pubId = reference("pubId", Pub_Table) val pubStateId = reference("pubStateId", PubS_Table) } val maxPSCId = PubSC_Table.id.max() val lastPscQuery = PubSC_Table .slice(PubSC_Table.pubId, PubSC_Table.pubStateId, maxPSCId) .selectAll() .groupBy(PubSC_Table.pubId, PubSC_Table.pubStateId) .alias("lastPsc") val result = Pub_Table .innerJoin(lastPscQuery, { Pub_Table.id }, { lastPscQuery[PubSC_Table.pubId] }) .innerJoin(PubS_Table, { lastPscQuery[PubSC_Table.pubStateId]}, { PubS_Table.id}) .slice(Pub_Table.id, Pub_Table.title, lastPscQuery[maxPSCId]) .select { PubS_Table.tag eq "new" } .map { row -> Triple(row[Pub_Table.id], row[Pub_Table.title], row[lastPscQuery[maxPSCId]]) }