I want to simulate this query using kotlin exposed framework:
SELECT max(episodes.season_number) FROM episodes WHERE episodes.parent_id = 944947
I tried the next one query:
fun countSeasonsForParentId(id: Int) = transaction {
EpisodeTable.slice(EpisodeTable.season)
.select { EpisodeTable.parentId eq id }
.map { it[EpisodeTable.season] }.maxOrNull()
}
But this query just results in:
SELECT episodes.season_number FROM episodes WHERE episodes.parent_id = 944947
and the max value is selected in the code.
How to perform finding max value on the side of the database and map it to Int
?
CodePudding user response:
I tried similar query and I believe it fits your need.
The query is:
Reservations
.slice(Reservations.date.max())
.select { Reservations.note eq "it" }
.maxByOrNull { Reservations.date }
And it generates SQL query:
SELECT MAX(reservations."date") FROM reservations WHERE reservations.note = 'it'
Your query can be used as:
EpisodeTable
.slice(EpisodeTable.season.max())
.select { EpisodeTable.parentId eq id }
.maxByOrNull { EpisodeTable.season }
?.get(EpisodeTable.season.max())
Alternative, for extracting one value seems more appropriate:
EpisodeTable
.slice(EpisodeTable.season.max())
.select { EpisodeTable.parentId eq id }
.firstOrNull()
?.get(EpisodeTable.season.max())