Sql server 前几个月处于状态的记录的T-SQL计数
我有一个T-SQL Quotes表,需要能够计算在过去几个月中有多少引号处于打开状态 我必须处理的日期是“添加日期”时间戳和“更新日期”时间戳。一旦将报价放入值为“1”的“赢得”或“损失”列中,则无法再更新该报价。因此,“更新日期”实际上成为关闭状态时间戳 以下是一些示例记录: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
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