SQL Count Of Open Orders Each Day Between Two Dates

后端 未结 4 1180
感情败类
感情败类 2020-12-21 04:38

I\'ve tried searching but it\'s likely I\'m using the wrong keywords as I can\'t find an answer.

I\'m trying to find the number of orders that are open between two d

4条回答
  •  感动是毒
    2020-12-21 05:08

    My favorite way to do this counts the number of cumulative opens and the number of cumulative closes over time.

    with cumopens as
        (select employee, opened as thedate,
                row_number() over (partition by employee order by opened) as cumopens,
                0 as cumcloses
         from eo
        ),
         cumcloses as
        (select employee, closed as thedate, 0 as cumopens,
                row_number() over (partition by employee order by closed ) as cumcloses
         from eo
        )
    select employee, c.thedate, max(cumopens), max(cumcloses),
           max(cumopens) - max(cumcloses) as stillopened
    from ((select *
           from cumopens
          ) union all
          (select *
           from cumcloses
          )
         ) c
    group by employee, thedate
    

    The only problem with this approach is that only dates where there is employee activity get reported. This works in your case.

    The more general solution requires a sequence numbers to generate dates. For this, I often create one from some existing table with enough rows:

    with nums as
        (select row_number() over (partition by null order by null) as seqnum
         from employees
        )
    select employee, dateadd(day, opened, seqnum) as thedate, count(*)
    from eo join
         nums
         on datediff(day, opened, closed) < seqnum
    group by employee, dateadd(day, opened, seqnum)
    order by 1, 2
    

提交回复
热议问题