【问题标题】:Window Function with a condition带条件的窗函数
【发布时间】:2019-01-09 00:47:45
【问题描述】:

我有下表。

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

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

表A

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

【问题讨论】:

    标签: sql oracle window-functions


    【解决方案1】:

    你可以像下面这样使用:

       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;
    

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

    附:您似乎想查看 First_Values 的结果,我将它与 "is" = 1

    的情况相匹配

    SQL Fiddle Demo

    【讨论】:

      【解决方案2】:

      改用min()

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

      【讨论】:

        猜你喜欢
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多