如何用DB2 SQL过滤非最新行,且额外条件不在WHERE子句中?
解决方案:DB2 SQL实现按最新关系筛选查询
要实现你需求的查询逻辑,我们可以利用DB2支持的窗口函数精准筛选每个人员(Col1+Col2组合)的最新关系记录,再结合目标联系人条件过滤。以下是具体的SQL语句:
WITH ranked_relationships AS ( SELECT col1, col2, col3, col4, col5, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS rn FROM schema.table ) SELECT col1, col2 FROM ranked_relationships WHERE rn = 1 AND col4 = 'John' AND col5 = 'Doe';
逻辑说明:
- 先通过CTE(
ranked_relationships)给每条记录按col1和col2分组,再对每组内的记录按col3(日期)降序排序,用ROW_NUMBER()生成序号,每组里最新的记录序号会是1。 - 主查询里只保留序号为1的最新记录,同时筛选出
col4='John'且col5='Doe'的结果。
结合你的示例数据验证:
- Bob Smith的两条记录中,2010-01-01的记录是最新的(
rn=1),但这条的联系人是Jane Jones,所以不会被选中; - Ted Jones的两条记录中,2008-01-01的记录是最新的(
rn=1),且联系人是John Doe,会被返回; - 如果查询Pete Mills,因为他对应的Ted Jones的最新联系人是John Doe,所以无结果,完全符合需求。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

