我有一個T-SQL Quotes表,需要能夠計算過去幾個月內處於打開狀態的引用數。T-SQL前幾個月的狀態記錄數
我必須使用的日期是'Add_Date'時間戳和'Update_Date'時間戳。一旦報價被置於該列中值爲'1'的'Won'或'Loss'列中,它就不能再被更新。因此,'Update_Date'實際上變成了Closed_Status時間戳。
下面的幾個例子記錄:
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
這裏的所有數據的鏈接在這裏: https://drive.google.com/open?id=0B4xdnV0LFZI1T3IxQ2ZKRDhNd1k
I asked this question previously this year,並已使用下面的代碼:
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;
問題此代碼是否返回累計值。所以1月份很好,但是2月份的確是1月+ 2月份,3月份是1月份+ 2月份+ 3月份等等。我花了一段時間才發現這種情況,現在數字又回來了,我試圖糾正他們。
從整個數據集這段代碼的結果是:
Year-Month Open_Quote_Count
2017-01 153
2017-02 265
2017-03 375
2017-04 446
2017-05 496
2017-06 560
2017-07 609
期望的結果將是許多行情如何該月份期間,在一個開放的狀態,而不是累積的:
Year-Month Open_Quote_Count
2017-01 153
2017-02 112
2017-03 110
2017-04 71
預先感謝您的幫助!
的SQL Server的哪個版本? – scsimon
@scsimon,這是一個通過基於Web的ERP客戶端的T-SQL查詢,我相信這是2012年,但不是100%肯定的。 – SDS