有没有办法在select语句中使用类似LAG()的函数引用前一行(或多行)而不在结果中获取行?我想检查是否存在具有相同主题名称和标签(不同列)的行具有记录计数>的实例。连续三次,因为记录计数每5分钟进行一次,然后创建一个包含值' TRUE'或者'错误'。但是,我只希望true或false值位于不同主题名称和标签组合的旁边,其中记录计数值是该组合的MAX(recordCount)。
select Distinct n.SUBJECT
,n.label
,cast(cast(max(a.RecCount) AS DECIMAL(10, 2)) / 100 AS DECIMAL(10, 2)) AS MaxRecCount
,"Red" =
CASE
when n.label = lag(n.label,1) OVER(Partition BY n.label ORDER BY n.label)
and cpu.RecCount >=85.00
and LAG(cpu.RecCount,1) OVER(Partition BY n.label ORDER BY n.label) >=85.00
and LAG(cpu.RecCount,2) OVER(Partition BY n.label ORDER BY n.label) >=85.00
then 'TRUE'
ELSE 'FALSE'
END
from n, cpu
group by n.subject, n.label, cpu.reccount
对于原始RecCount和之前的2条记录,返回TRUE为FALSE,但如果记录计数在数据收集期间的任何时间点连续超过85次,我只需要TRUE或FALSE,并将其置为TRUE或新列中的FALSE值" Red"在特定主题,标签组合的max()RecCount旁边。