Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上个月的SQL结转_Sql_Sql Server - Fatal编程技术网

上个月的SQL结转

上个月的SQL结转,sql,sql-server,Sql,Sql Server,我有一些数据,我正试图得到一些计数。记录的输入日期和关闭日期(如果记录已关闭)。我希望能够得到从上个月到本月的第一个月,还有多少记录是开放的。这里有一个例子。第一个表是数据,第二个表是我正在寻找的结果。在第二个表中,忽略括号,它们只是构成该计数的记录的ID Position DateEntered DateClosed 1 12/15/2017 12/20/2017 11 12/20/2017 1/7/2018 2

我有一些数据,我正试图得到一些计数。记录的输入日期和关闭日期(如果记录已关闭)。我希望能够得到从上个月到本月的第一个月,还有多少记录是开放的。这里有一个例子。第一个表是数据,第二个表是我正在寻找的结果。在第二个表中,忽略括号,它们只是构成该计数的记录的ID

Position    DateEntered   DateClosed
    1        12/15/2017   12/20/2017
    11       12/20/2017    1/7/2018
    2        1/23/2018     2/3/2018
    3        1/24/2018  
    4        2/15/2018  
    5        2/20/2018     5/16/2018
    6        3/3/2018      3/15/2018
    7        3/23/2018     4/12/2018
    8        4/11/2018     5/10/2018
    9        4/12/2018     4/25/2018
    10       5/4/2018   

Year    Month      Carried Over
2018    January        1 (11)
2018    February       2 (2,3)
2018    March          3 (3,4,5)
2018    April          4 (3,4,5,7)
2018    May            4 (3,4,5,8)
2018    June           3 (3,4,10)
2018    July           3 (3,4,10)
2018    August         3 (3,4,10)

这可能吗?如果可能,如何实现?我为此绞尽脑汁了几个小时。

每个月,你都需要从该月之前开始到该月之后结束的行数。我在想:

with dates as (
      select cast('2018-01-01' as date) as dte
      union all
      select dateadd(month, 1, dte)
      from dates
      where dte < '2018-08-01'
    )
select d.dte,
       (select count(*)
        from t
        where t.dateentered < d.dte and
              (t.dateclosed > d.dte or t.dateClosed is null)
       ) as carriedover
from dates d;

请注意,这会将日期放在一列中,而不是将年和月拆分为单独的列。这很容易安排,但我更喜欢将日期组成部分放在一起。

是否有理由对这个问题进行未注释的否决投票,这似乎是一个非常合理的答案。@dk96m如果您需要其他日期,我可能会为类似的问题推荐一个日历表。然后使用过滤范围而不是递归cte连接到日历表。日期并不像Gordon的第二部分那么重要。@GordonLinoff,这很有效。假设2018年,但如果我有几年的数据,我该如何处理呢?@Shawn你能举个例子吗。我从来没有使用过日历表事实上,现在我已经查过了,我可以访问日历表了。如何使用Gordans查询来实现这一点?如果我正确地阅读了您的预期结果,那么您需要当月标记为DateClosed的职位数量,在括号中,需要上个月关闭但打开的职位ID。正确吗?什么版本的SQL Server?@Shawn。你没有正确地阅读问题。OP只需要数字,而不是括号中的列表。我还认为你没有理解“结转”的定义,所以你可能需要更仔细地阅读这个问题。对不起,没有理解“忽略父项”。我正在研究如何包括这些职位。啊!