2011-05-11 39 views
0

有人可以幫助使用四個參數(StartDate,EndDate和DayOftheWeek和Frequency)的SQL函數,並返回在這些日期範圍之間的numberofPeriods。如何創建將在兩個日期之間返回numberOfPeriods的函數

例如,如果您將startdate作爲05/12/2011傳遞,enddate作爲06/12/2011,並且DayOftheweek = Friday,並且Frequency = Weekly),那麼它應該計算05/12之間有多少個星期五/ 2011和06/12/2011每週。在此示例中,這些日期範圍之間有5個星期五。

+0

在我看來,像你試圖使用數據庫引擎來計算datespans ....它肯定能夠這一點,但我沒有看到你爲什麼想要這樣做?考慮到與存儲的數據無關...... – Matthew 2011-05-11 22:01:50

+4

什麼是「頻率」?如果您通過DayOftheweek = Friday,那麼比Weekly還有什麼其他頻率會有意義? – 2011-05-11 22:03:19

回答

1

我與你們同在,直到

許多週五 05/12/2011和06/12/2011之間如何在每週 基礎上

我要去承擔那句「每週」就是噪音。 (這實際上是無稽之談,不是嗎?每週星期五的數量與每天或每月的星期五數量有什麼區別?)

最簡單的解決方案是使用日曆表。我認爲這也是最容易理解的。

select count(*) 
from calendar 
where (cal_date between '2011-05-12' and '2011-06-12') 
    and (day_of_week = 'Fri'); 

I've posted a simplified version我使用的一個。它是爲PostgreSQL編寫的,但它很容易適應。注意約束。

1

這會給你想要沒有新的特殊表。這是一個sql server解決方案。你可以精心創建成重用視圖或存儲過程

declare @beginDate date,@endDate date,@dayOfWeek int 
set @beginDate = '05/12/2011' 
set @endDate = '2011-06-12' 
set @dayOfWeek = 6; 

with datesBetween as (
select @beginDate as OriginalDate,0 as Periods 
union all 
select CAST(DATEADD(day,1,OriginalDate) as date), CASE When datepart(weekday,OriginalDate) = 6 then Periods+1 else Periods end 
from datesBetween 
where OriginalDate <> @endDate 
) 

select MAX(periods) 
from datesBetween