场景数据:
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:
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的当前关系。鲍勃·史密斯目前的关系是简·琼斯。
如果我在搜索皮特·米尔斯,我不会想找到任何东西,因为皮特·米尔斯不是泰德·琼斯目前的恋人。
发布于 2019-01-19 04:42:12
您需要使用DB2称为OLAP functions的东西(其他RDMS引擎倾向于将它们称为窗口函数-这两个术语都是有效的)。OLAP函数允许您返回有关行的分析数据,例如,它在排序列表中的编号。
对于您的查询,您只想返回每个人的第一行,所以我们使用一个名为ROW_NUMBER()的OLAP函数。当我们使用此函数时,我们希望对Col1/Col2数据进行分区(即,我们对该数据进行分组),然后对Col3进行反向排序,以获得最新的结果。在此之后,我们希望选择在OLAP函数中具有top值的行,如下所示:
SELECT *
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col3 DESC) AS rn
FROM schema.table
) AS ranked_scenarios
WHERE rn = 1https://stackoverflow.com/questions/54261001
复制相似问题