簡體   English   中英

上個月的SQL結轉

[英]SQL Carryover from previous month

我有一些數據正在嘗試依靠。 有記錄輸入的時間和記錄關閉的日期(如果尚未關閉)。 我希望能夠統計到截至本月第一天為止上個月還有多少條記錄處於打開狀態。 這是一個例子。 第一個表是數據,第二個表是我正在尋找的結果。 在第二個表中,忽略括號,它們只是構成該計數的記錄的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;

請注意,這會將日期放在單個列中,而不是將年和月分成不同的列。 這很容易安排,但我更喜歡將日期部分放在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM