我有一个具有以下结构的数据库表:
table Transaction {
id BIGINT PRIMARY KEY
, group VARCHAR(10)
, subgroup VARCHAR(8)
, createdOn DATETIME
}
我需要在我的应用程序中找到group / subgroup的所有最新事务。我知道如何在纯SQL中实现这一点。但是,由于这是Grails应用程序,我想使用Gorm来实现相同的结果。我已经搜索了Grails / Hibernate论坛,似乎有一些类似的结果我的问题,但是没有左外连接解决方案必须处理自引用连接。
这是我试图在Gorm中复制的SQL
SELECT t1.*
FROM transaction as t1
LEFT OUTER JOIN transaction as t2
ON (t1.group = t2.group
AND t1.subgroup = t2.subgroup
AND t1.createdOn < t2.createdOn)
WHERE t1.group = :someUserSuppliedGroup
AND t2.subgroup = :someOptionalUserSuppliedSubgroup
AND t2.id IS NULL
示例数据:
ID | Group | Subgroup | CreatedOn
1 G1 SG1 01/01/2014 00:00:00 AM
2 G1 SG1 01/01/2014 01:00:00 AM
3 G1 SG2 03/03/2014 03:00:00 PM
4 G1 SG2 03/04/2014 03:00:00 PM
预期结果
ID | Group | Subgroup | CreatedOn
2 G1 SG1 01/01/2014 01:00:00 AM
4 G1 SG2 03/04/2014 03:00:00 PM
我暂时编写了一个解决方案,用于执行最新事务的分组和确定。这在初始数据库查询运行后发生。显然,我想重构我的代码,以便数据库完成繁重工作。
提前感谢您对可能解决方案的任何见解。我也对SQL使用相关子查询来确定正确数据的解决方案持开放态度。我只是认为这个SQL更简单。