将函数中的当前行值用作常量SQL

将函数中的当前行值用作常量SQL,sql,db2,Sql,Db2,我正在尝试运行一个查询,其中必须使用当前行作为轴心。例如: 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或任何数据库中是否可能,一般来说,我的

我正在尝试运行一个查询,其中必须使用当前行作为轴心。例如:

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保持不变,同时查看其他人物的情况。

你的意思是这样的吗

DECLARE @Age as int

SET @Age = SELECT PERSONAGE FROM PERSON WHERE ID=2

SELECT 
 PERSONID, 
 PERSONAGE AS CURRENTAGE, 
 MAX(CASE WHEN (@Age-PERSONAGE) >1 THEN PERSONAGE ELSE NULL END) 
  OVER (PARTITION BY PERSONCITY) AS OldestYounger
FROM 
 PERSON

这样,您就可以了解一个用户的年龄,并将其和其他用户进行比较。您的查询现在所做的是将每个用户与他们自己进行比较,并按城市进行排序。

您好夏普欢迎来到StackOverflow,请阅读,您是否希望将此行专门设置为pivot或具有类似pivot的属性?如果不尝试进行一对一透视,主键和外键是执行此操作的常用方法。您可能希望显示预期结果的样子,因为你的解释不是很有帮助。你的例子对我来说没有意义--
CURRENTAGE-PERSONAGE
将始终为0,因为你在上面显示CURRENTAGE和PERSONAGE是相同的东西,除非你是从另一个表或什么东西加入这些变量?…我想我们需要看看你的实际用例,因为我怀疑
LAG
不是一个选项。我怀疑如果你在查询中重述“问题”,会出现一些问题-也就是说,不要先做数学运算,然后得到最大值,先得到最大值(使用
无界前置
或其他什么),然后再做数学运算。因为我有理由肯定OP想要得到所有人的结果,使用这样的主机变量可能无法(有效地)工作。我认为使用
SELECT
会混淆原始问题中的内容。