首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lead和case表达式

Lead和case表达式
EN

Stack Overflow用户
提问于 2019-02-07 01:39:20
回答 2查看 1.2K关注 0票数 2

我有一张桌子:

代码语言:javascript
复制
ID    Date
-----------------
1     1/1/2019
1     1/15/2019

预期输出:

代码语言:javascript
复制
ID   DATE      LEAD_DATE  
-------------------------
1    1/1/2019  1/14/2019
1    1/15/2019  SYSDATE

SQL:

代码语言:javascript
复制
SELECT 
    *,
    CASE 
        WHEN LEAD (a.date) OVER (PARTITION BY a.ID ORDER BY a.date) = TRUNC(a.date) THEN NULL
        ELSE LEAD (a.date) OVER (PARTITION BY a.id ORDER BY a.date) - NUMTODSINTERVAL(1,'second')
    END AS LEAD_DT
 FROM a

结果:

代码语言:javascript
复制
ID  DATE      LEAD_DATE
-------------------------
 1  1/1/2019    1/14/2019
 1  1/15/2019   

是否可以在case表达式中添加系统日期when null

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-07 01:43:10

使用NVL

代码语言:javascript
复制
SELECT 
    a.*,
    NVL(CASE 
        WHEN LEAD (a.date) OVER (PARTITION BY H.ID ORDER BY a.date) = TRUNC(a.date) THEN NULL
        ELSE LEAD (a.date) OVER (PARTITION BY a.id ORDER BY a.date) - NUMTODSINTERVAL(1,'second')
    END, SYSDATE) AS LEAD_DT
FROM a

或者,更好的是:

代码语言:javascript
复制
SELECT 
    a.*,
    CASE LEAD (a.date) OVER (PARTITION BY a.ID ORDER BY a.date)
        WHEN TRUNC(a.date) THEN SYSDATE
        WHEN NULL THEN SYSDATE
        ELSE LEAD (a.date) OVER (PARTITION BY a.id ORDER BY a.date) - NUMTODSINTERVAL(1,'second')
    END AS LEAD_DT
 FROM a
票数 2
EN

Stack Overflow用户

发布于 2019-02-07 02:49:05

使用COALESCE:

代码语言:javascript
复制
SELECT a.*,
  CASE COALESCE(LEAD("Date") OVER (PARTITION BY ID ORDER BY "Date") - "Date", 0)
    WHEN 0 THEN SYSDATE
    ELSE LEAD("Date") OVER (PARTITION BY ID ORDER BY "Date") - INTERVAL '1' SECOND
  END AS LEAD_DT
FROM a
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54559533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档