具有条件的窗口函数

时间:2018-08-01 12:33:24

标签: sql oracle window-functions

我有下表。

在满足条件时可以创建窗口函数First_Value吗?

例如,当is = 1时我需要第一个值,并按ID进行分区

TableA

ID    Date       IS
 1     1/1/18    0
 1     1/2/18    1

我的工作:

   SELECT 
   CASE
   WHEN A.IS = 1 THEN A.DATE END)OVER (PARTITION BY A.ID ORDER BY A.DATE)                
   END FIRST_ATTEMPT_DT
   FROM TABLEA A

2 个答案:

答案 0 :(得分:1)

改为使用min()

select min(case when a.is = 1 then a.date end) over (partition by a.id)

答案 1 :(得分:0)

您可以按以下方式使用:

   SELECT 
   (CASE
   WHEN A."is" = 1 THEN 
        First_Value("Date") OVER (PARTITION BY A.ID ORDER BY A."Date")  
   ELSE
        A."Date"
   END) as FIRST_ATTEMPT_DT
   FROM TABLEA A
   WHERE "is" = 1;

IS DATE 在Oracle中是保留的关键字,因此应加引号。

P.S。看来您想查看 First_Values 的结果,并且我为“ is” = 1

的情况进行了匹配

SQL Fiddle Demo