Sql 了解历史上每天开放的门票数量

Sql 了解历史上每天开放的门票数量,sql,sql-server,Sql,Sql Server,我有一张看起来像下图的桌子 ID | CreatedDate | CloseDate 271 | 01-Jan-2018 | 02-Jan-2018 278 | 03-Jan-2018 | 05-Jan-2018 333 | 03-Jan-2018 | NULL 我的任务是找出一个月内每天有多少张票一直开到第二天。如果CloseDate与创建日期不在同一日期,或者CloseDate为空,则票据将被归类为保持打开状态 我从上面得到的理想输出如下所示

我有一张看起来像下图的桌子

 ID   | CreatedDate   |  CloseDate
271   | 01-Jan-2018   |  02-Jan-2018
278   | 03-Jan-2018   |  05-Jan-2018
333   | 03-Jan-2018   |     NULL
我的任务是找出一个月内每天有多少张票一直开到第二天。如果CloseDate与创建日期不在同一日期,或者CloseDate为空,则票据将被归类为保持打开状态

我从上面得到的理想输出如下所示

Day          | Tickets Remaining
01-Jan-2018  |        1
02-Jan-2018  |        0
03-Jan-2018  |        2
04-Jan-2018  |        2
05-Jan-2018  |        1

这有意义吗?使用SQL Server 2016..

如果手头没有数字/理货表,可以使用递归CTE:

with cte as (
      select id, createddate as dte, coalesce(closeddate, convert(date, getdate())) as closeddate
      from t
      union all
      select id, dateadd(day, 1, dte), closeddate
      from cte
      where dte < closeddate
     )
select dte, count(*)
from cte
group by dte;

有人问你:“我的任务是在一个月内的每一天找出真相。”;我们还没去过。你试过什么,为什么不奏效?请不要要求我们为你做工作。老实说,我不知道从哪里开始。我尝试了一个案例陈述,但我就是不知道该怎么办。我不指望我能完成全部的工作,只是一些方向,因为我还在学习……至少让我们看看那次尝试吧。您在上面提出的唯一问题是“这有意义吗?”这不是一个编程问题。请向我们提供您的SQL存在的问题,并解释为什么它没有在您的SQL之后提供结果。第一步是生成1月到1月之间的所有日期。然后,与您得到的表形成一个左连接,然后统计第一个块的日期在表打开和关闭日期边界内匹配的记录
select v.dte, count(t.id)
from (values (convert(date, '2018-01-01')),
             (convert(date, '2018-01-02')),
             (convert(date, '2018-01-03')),
             (convert(date, '2018-01-04')),
             (convert(date, '2018-01-05')),
     ) v(dte) left join
     t
     on v.dte >= t.createddate and
        (v.dte <= t.closeddate or t.closeddate is null)
group by v.dte
order by v.dte;