首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用DB2 SQL,对于不是where子句一部分的条件,如何避免返回不是最新的行?

使用DB2 SQL,对于不是where子句一部分的条件,如何避免返回不是最新的行?
EN

Stack Overflow用户
提问于 2019-01-19 04:29:04
回答 1查看 34关注 0票数 2

场景数据:

代码语言:javascript
运行
复制
Row   Col1    Col2    Col3         Col4    Col5
1     Bob     Smith   2000-01-01   John    Doe
2     Bob     Smith   2010-01-01   Jane    Jones
3     Ted     Jones   2005-01-01   Pete    Mills
4     Ted     Jones   2008-01-01   John    Doe

我的SQL:

代码语言:javascript
运行
复制
select col1, col2 from schema.table where col4='John' and col5='Doe'

我不知道如何根据下面所述的需要限制我的数据。

我正在搜索John Doe在第4/5列中的位置,但我只想在第1/2列中的人员的当前关系(基于第3列)的情况下检索行。

在上面的数据中,我确实想要第四行,因为无名氏目前与泰德·琼斯有关。但是我不想检索第一个row...because,John Doe行不是Bob Smith的当前关系。鲍勃·史密斯目前的关系是简·琼斯。

如果我在搜索皮特·米尔斯,我不会想找到任何东西,因为皮特·米尔斯不是泰德·琼斯目前的恋人。

EN

回答 1

Stack Overflow用户

发布于 2019-01-19 04:42:12

您需要使用DB2称为OLAP functions的东西(其他RDMS引擎倾向于将它们称为窗口函数-这两个术语都是有效的)。OLAP函数允许您返回有关行的分析数据,例如,它在排序列表中的编号。

对于您的查询,您只想返回每个人的第一行,所以我们使用一个名为ROW_NUMBER()的OLAP函数。当我们使用此函数时,我们希望对Col1/Col2数据进行分区(即,我们对该数据进行分组),然后对Col3进行反向排序,以获得最新的结果。在此之后,我们希望选择在OLAP函数中具有top值的行,如下所示:

代码语言:javascript
运行
复制
SELECT *
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col3 DESC) AS rn
    FROM schema.table
) AS ranked_scenarios
WHERE rn = 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54261001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档