我正在尝试运行一个查询,我必须使用当前行作为一个数据透视表。举个例子:
SELECT
PERSONID,
PERSONAGE AS CURRENTAGE,
MAX(CASE WHEN (CURRENTAGE-PERSONAGE) >1 THEN PERSONAGE ELSE NULL END)
OVER (PARTITION BY PERSONCITY) AS OldestYounger
FROM
PERSON;
我想知道在DB2或任何数据库中是否可以这样做,我的场景要复杂得多。我不是在寻找一种解决方法,只是将当前行用作数据透视表然后按公共属性进行分区。
我知道在这个示例中,我可以使用LAG()
并按年龄顺序排序,或使用RANK()
。
编辑:
预期结果:
PersonID|CurrentAge|OldestYounger|City
1 22 18 York
2 25 22 York
3 30 24 Jersey
4 18 NULL York
5 24 NULL Jersey
6 7 NULL Miami
当选择PersonID 2时,它应该在同一个城市找到两个年轻人,然后获得MAX()
值。但是当执行CurrentAge-PersonAge时,它是同一个并且将始终返回零。我正在寻找一种方法,使该实例的CurrentAge不变,同时查看其他PersonAge。