Sql server 前几个月处于状态的记录的T-SQL计数

Sql server 前几个月处于状态的记录的T-SQL计数,sql-server,tsql,date,count,Sql Server,Tsql,Date,Count,我有一个T-SQL Quotes表,需要能够计算在过去几个月中有多少引号处于打开状态 我必须处理的日期是“添加日期”时间戳和“更新日期”时间戳。一旦将报价放入值为“1”的“赢得”或“损失”列中,则无法再更新该报价。因此,“更新日期”实际上成为关闭状态时间戳 以下是一些示例记录: Quote_No Add_Date Update_Date Open_Quote Win Loss 001 01-01-2016 NULL 1 0

我有一个T-SQL Quotes表,需要能够计算在过去几个月中有多少引号处于打开状态

我必须处理的日期是“添加日期”时间戳和“更新日期”时间戳。一旦将报价放入值为“1”的“赢得”或“损失”列中,则无法再更新该报价。因此,“更新日期”实际上成为关闭状态时间戳

以下是一些示例记录:

Quote_No   Add_Date   Update_Date  Open_Quote  Win  Loss
001        01-01-2016  NULL         1           0    0
002        01-01-2016  3-1-2016     0           1    0
003        01-01-2016  4-1-2016     0           0    1
以下是指向此处所有数据的链接:

并一直在使用以下代码:

with n as (
      select row_number() over (order by (select null)) - 1 as n
      from master..spt_values
     )
select format(dateadd(month, n.n, q.add_date), 'yyyy-MM') as yyyymm,
       count(*) as Open_Quote_Count
from quotes q join
     n
     on (closed_status = 1 and dateadd(month, n.n, q.add_date) <= q.update_date) or
        (closed_status = 0 and dateadd(month, n.n, q.add_date) <= getdate()) 
group by format(dateadd(month, n.n, q.add_date), 'yyyy-MM')
order by yyyymm;
期望的结果是在特定月份有多少报价处于开放状态,而不是累计:

Year-Month  Open_Quote_Count
2017-01     153
2017-02     112
2017-03     110
2017-04     71

提前感谢您的帮助

除非我遗漏了什么,否则LAG()将非常适合这里

示例

Declare @YourTable Table ([Year-Month] varchar(50),[Open_Quote_Count] int)
Insert Into @YourTable Values 
 ('2017-01',153)
,('2017-02',265)
,('2017-03',375)
,('2017-04',446)
,('2017-05',496)
,('2017-06',560)
,('2017-07',609)

Select *
      ,NewValue = [Open_Quote_Count] - lag([Open_Quote_Count],1,0) over (Order by [Year-Month]) 
 From @YourTable   --<< Replace with your initial query

sql server的哪个版本?@scsimon,这是一个通过基于web的ERP客户端进行的T-sql查询,我相信现在是2012年,但不是100%确定。你没有遗漏任何东西-答案非常棒,因为它非常简单。完美的谢谢你,这让我松了一口气。我怀疑你只是想得太多了。我们都为此感到内疚。:)
Declare @YourTable Table ([Year-Month] varchar(50),[Open_Quote_Count] int)
Insert Into @YourTable Values 
 ('2017-01',153)
,('2017-02',265)
,('2017-03',375)
,('2017-04',446)
,('2017-05',496)
,('2017-06',560)
,('2017-07',609)

Select *
      ,NewValue = [Open_Quote_Count] - lag([Open_Quote_Count],1,0) over (Order by [Year-Month]) 
 From @YourTable   --<< Replace with your initial query
Year-Month  Open_Quote_Count    NewValue
2017-01     153                 153
2017-02     265                 112
2017-03     375                 110
2017-04     446                 71
2017-05     496                 50
2017-06     560                 64
2017-07     609                 49