H2数据库去重:保留指定最新日期行的全字段查询方法
在H2数据库中按指定列去重并保留最新完整行的实现方案
你需要基于Product列去重,保留每个Product对应Date最大的完整行(包含ID、Customer等所有字段),但原有的分组查询只能拿到Product和Date,SQLite的写法在H2中不适用,这里提供两种可行的H2实现方式:
方法一:子查询关联原表
先通过子查询获取每个Product的最新日期,再关联原表匹配出对应的完整行:
SELECT t.* FROM your_table t INNER JOIN ( SELECT "Product", MAX("Date") AS max_date FROM your_table GROUP BY "Product" ) t_max ON t."Product" = t_max."Product" AND t."Date" = t_max.max_date
注意:如果同一个Product存在多条日期相同的最新记录,该方法会返回所有这些记录。
方法二:窗口函数筛选(推荐)
利用H2支持的窗口函数ROW_NUMBER(),按Product分组后对Date降序排序,取每个分组的第一行:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY "Product" ORDER BY "Date" DESC) AS rn FROM your_table ) t WHERE rn = 1
如果需要在日期相同时确保唯一行,可以在ORDER BY后追加其他唯一字段(如ID DESC),比如ORDER BY "Date" DESC, "ID" DESC。
内容的提问来源于stack exchange,提问作者89kamil
相关产品推荐
相关产品推荐

