首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Teradata :首次搜索列中的值更改

Teradata :首次搜索列中的值更改
EN

Stack Overflow用户
提问于 2018-02-08 15:40:32
回答 2查看 1.1K关注 0票数 0

因此,我有一个表,它每天跟踪客户帐户,并记录每个工作日的值,例如帐户上的余额。

例如:

代码语言:javascript
复制
Acct_Nbr   Acct_Open_Date   System_Date   Balance
-------------------------------------------------
111        2017-12-01       2017-12-01    0.00
111        2017-12-01       2017-12-04    0.00
111        2017-12-01       2017-12-05    0.00
111        2017-12-01       2017-12-06    500.00
222        2017-12-01       2017-12-01    0.00
222        2017-12-01       2017-12-04    0.00
222        2017-12-01       2017-12-05    0.00
222        2017-12-01       2017-12-06    0.00
222        2017-12-01       2017-12-07    0.00
222        2017-12-01       2017-12-08    250.00

我正在尝试编写一个查询,该查询将返回Acct_Open_Date和System_Date之间的天数#,余额第一次变为>0(即帐户获得资金的日期)。

我计划使用case when语句将天数的#分组在桶中(即<=5 days,6-10天等)每一桶还#帐户。

根据上表,它将返回:

代码语言:javascript
复制
Time_to_fund   Count_of_accts
-----------------------------
<=5 days       1
6-10 days      1
>10 days       0

我不完全确定如何编写一个查询,该查询将在每个帐户的基础上对每一行进行搜索,直到它找到余额> 0的值,然后取该行的System_Date,并从中减去Acct_Open_Date以给我指定的天数。

任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-08 16:10:10

代码语言:javascript
复制
select
   CASE WHEN diff <=  5 THEN'<=5 days'
        when diff <= 10 then '6-10 days'
        ELSE '>10 days'
   END as Time_to_fund,
   COUNT(*)
from
 (
    select
       System_Date - Acct_Open_Date as diff -- number of days between
    from mytable
    where Balance > 0 
    qualify -- find the first row with a Balance > 5
       row_number()
       over (partition by Acct_Nbr
             order by System_Date) = 1
 ) as dt
票数 1
EN

Stack Overflow用户

发布于 2018-02-08 16:00:04

尝试通过以下方式在组内使用组:

代码语言:javascript
复制
SELECT CASE WHEN fund_times.Time_to_fund_in_days<= 5 THEN'<=5 days'
when fund_times.Time_to_fund_in_days<= 10 then '6-10 days'
ELSE '>10 days' END as Time_to_fund, COUNT(fund_times.acct_Number) AS Count_of_accts
    (SELECT t.acct_Number, MIN( (t.System_Date - t.Acct_Open_Date) * 86400) as Time_to_fund_in_days
    from table as T
    WHERE t.Balance>0
    GROUP BY t.acct_Number) AS fund_times
GROUP BY CASE WHEN fund_times.Time_to_fund_in_days<= 5 THEN'<=5 days'
when fund_times.Time_to_fund_in_days<= 10 then '6-10 days'
ELSE '>10 days' END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48689315

复制
相关文章

相似问题

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