2014-03-28 53 views
1

我试图找到每周开放的订单数量。一个开放多周的订单应该包含在每周开放的数量中。数据看起来像下面每周未结订单的数量

id open_dt    close_dt 
1 2014-01-01 07:00:00 2014-01-01 07:00:00 
2 2014-01-01 07:00:00 2014-01-02 07:00:00 
3 2014-01-02 07:00:00 2014-01-09 07:00:00 
4 2014-01-08 07:00:00 NULL 

NULL close_dt算作仍然开放,因为它是打开

应该出现在每星期

我的查询看起来像以下但它没有返回我期待的数字:

SELECT YEAR(open_dt) AS year, WEEK(open_dt) AS week, count(*) 'open' 
FROM table 
WHERE open_dt >= week(open_dt) 
OR 
(
    close_dt > week(open_dt) 
    OR close_dt IS NULL 
) 
GROUP BY YEAR(open_dt), WEEK(open_dt) 

我试图得到类似下面的结果:

year week open 
2014 1  3 
2014 2  2 
2014 3  1 
... 

欣赏任何提示或指导。

+0

我发现类似的问题在那里接受的解决方案是加入一个表但含有天/周的数字,我希望避免,如果可能的 –

回答

1

这是一个有助于获得日历表或星期列表的情况。让我假设你至少有一个在每个星期开:

select yw.y, yw.w, count(t.open_dt) as "Open" 
from (select distinct year(open_dt) as y, week(open_dt) as w, 
      year(open_dt) * 100 + week(open_dt) as yw 
     from table t 
    ) yw left outer join 
    table t 
    on yw.yw >= year(open_dt)*100 + week(open_dt) and 
     (yw.yw <= year(close_dt)*100 + week(close_dt) or close_dt is null) 
group by yw.y, yw.w 
order by yw.y, yw.w; 
+0

我喜欢你如何将星期数字作为子查询包含进来,从未想过要像这样尝试。 –

+0

我跑了查询。它返回0的前100行左右,然后是1010剩余的50.显然不是正确的结果。但是,它确实似乎每周返回一行包含数据,因此这是一个开始。 –

+0

这个查询不适合我,但它让我足够接近,我可以自己解决问题,所以我会将其标记为解决方案。谢谢。 –