You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:06:59