2016-07-22 56 views
0

Oracle的新手 - 我想创建一个病例陈述或某种排序指示符,可以识别何时将客户端视为“已启动”。我有以下数据。我希望能够计算每月。病例声明 - Oracle v.11

计算当月的所有Memberids,但也累计为仍被视为开放的成员。我不确定这是否是最好的平台,但我想问问。我可以在SQL之外求和。要做到这一点

201607 = 4 (Memberid: 1-3 & 5) 
201606 = 2 (Memberid: 4 & 5) 
Total records below = 5 

Start_Year_Month   EndDate  ID  Status 
    201607        1  OPEN 
    201607        2  OPEN 
    201607     201607  3  CLOSED 
    201606     201606  4  CLOSED 
    201606        5  OPEN 
+1

你想要什么结果? –

+1

你如何定义“订婚”?这是什么逻辑? – Nicarus

回答

1

的一种方法是比较简单的:

select m.mon, count(t.id) 
from (select distinct start_year_month as mon from t) m join 
    t 
    on m.mon >= t.start_year_month and 
     (m.mon <= t.enddate or t.enddate is null) 
group by m.mon; 

这不会有很大的性能的月数的增加(除非你的数据是相当小)。更高性能的解决方案有点复杂。