我try 使用Kotlin SQL Exposed框架进行下一个查询.

SELECT interation_id, group_id, max(version)
FROM interaction
GROUP BY group_id;

我有一个互动表,每个交互组可以有多个交互,每个交互都标有不同的版本.我想要检索每个组的交互ID及其最新版本

使用Exposed My Query类似于:

UserTable
    .slice(UserTable.id, UserTable.version.max())
    .selectAll()
    .groupBy(UserTable.versionGroupID)
    .toList()

然而,我得到的误差是UserTable.id must appear in the GROUP BY clause or be used in an aggregate function.但是,如果我这样做,GROUP BY将不会为versionGroupID返回一个值.

额外输入: 我想复制的一个例子就是这个表.

Interaction_id group_id version
0 1 0
1 2 0
2 2 1
3 2 2
4 1 1
5 1 2
6 2 3

我想得到一个结果ID:5和6.这是每个组ID的最后版本.

Interaction_id group_id version
3 1 2
6 2 3

任何人都可以使用kotlin Exposed SDK(或者可能是SQLexpose 出的麻烦在我这边)可以帮我一把吗?谢谢!

推荐答案

您必须创建子查询来查找InteractionTable中每个组的最高版本,然后将此子查询与原始表连接起来,以获取与最高版本对应的每个组的interaction_id.

试试这个

     val MaxVersionPerGroup = InteractionTable
    .slice(InteractionTable.versionGroupID, InteractionTable.version.max())
    .selectAll()
    .groupBy(InteractionTable.versionGroupID)
    .alias("MaxVersionPerGroup")

val maxVersionColumn = MaxVersionPerGroup[InteractionTable.version.max()]

val query = InteractionTable
    .join(MaxVersionPerGroup, JoinType.INNER, additionalConstraint = { 
        InteractionTable.versionGroupID eq MaxVersionPerGroup[InteractionTable.versionGroupID] and
        InteractionTable.version eq maxVersionColumn
    })
    .slice(InteractionTable.interation_id, InteractionTable.group_id, InteractionTable.version)
    .selectAll()

query.forEach { 
    println("Interaction ID: ${it[InteractionTable.interation_id]}, Group ID: ${it[InteractionTable.group_id]}, Version: ${it[InteractionTable.version]}")
}

Sql相关问答推荐

通过 Select 值的顺序进行排序ClickHouse

在SQL中创建一个计数器,根据BigQuery/SQL中的条件递归地添加行值

我怎样才能得到列值对应的最大值在另一个?

使用多个嵌套数组查询JSON数据

如何从Spark SQL的JSON列中提取动态数量的键值对

在xml.Modify方法中使用子字符串和可能的替代方法

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

此过程如何在不引用传递的参数值的情况下执行工作?

使用与JOIN一起使用的查询后进行分页和排序

更改重复值的情况

根据日期 Select ID 的上一条记录

我需要在 ASP.NET C# 中获取 2 个 SQL 查询结果的平均值

DB2 SQL查询结果多余数据

使用多个数据库调用重载 CQRS 模式

SQL 根据前一天的最大值计算每天的值数

根据不同日期标准分配组的逻辑

Postgres更新增量之间的差异

使用ALTER TABLE无法删除列

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

SQL/Postgres:按日期和其他属性对相关性能进行分组