在不提取的情况下引用SQL中的前一行

时间:2017-06-30 14:01:39

标签: sql rows lag

有没有办法在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旁边。

0 个答案:

没有答案