2012-12-07 88 views
-3

我需要幫助來在sql 2005中創建一個查詢。計數datediff在範圍內

我有4個日期:1個標準startdate和3個日期進行比較。 我需要計數在天datediffs 10.

DATEDIFF的範圍(日,開始日期,ENDDATE1)

多少次的從1至10的範圍內,從11至20和從21至30將出現。

This每3個結束!

然後,所有(3個enddates)的總和1至10 ASO(510倍< 11,275次> 10和< 21)

計算範圍的所有enddates百分比在此之後。

像785分之510= XX.XX%和七百八十五分之二百七十五= XX.XX%

難道我講得清楚嗎?

在此先感謝 1SeoAdvies

@米奇小麥,這不是一個貧窮的問題,這是一個很難回答的問題來解釋! 有沒有表來解釋這一點。幾乎每個表都有一個datatimefield!

我會再次嘗試用非常簡單的英語來解釋這個。 我有一個日期時間字段的表。在excelsheet中,我有另一個日期時間。 兩者都有相同的關鍵。 我知道如何計算daysiff日期。 我想知道1到10之間會出現多久。

例如:

DATEDIFF(日,DateTime1,DATETIME2)= 2

DATEDIFF(日,DateTime1,DATETIME2)= 3

DATEDIFF(日,DateTime1,DATETIME2)= 11

DATEDIFF(日,DateTime1,DATETIME2)= 2

DATEDIFF(日,DateTime1,DATETIME2)= 3

DATEDIFF(日,DateTime1,DATETIME2)= 11

DATEDIFF(日,DateTime1,DATETIME2)= 7

DATEDIFF(日,DateTime1,DATETIME2)= 6

結果是

< 11 = ***6*** (smaller then 11) 

10和< 21 = (BET吐溫10和21)

薩姆結果6 + 2 =

計算百分比:

較小然後11 = 6 \ 8 = 75%

大於11 + < 21 = 2 \ 8 = 25%

黑體/ INVERS項目是我所需要的值!

難道我讓自己現在很清楚????????

在此先感謝

+1

非常差的問題。 –

+0

目前還不清楚是什麼你正在嘗試做的,請你的表結構,一些樣本數據,然後期望的結果編輯您的帖子。否則,我有一種感覺,這個問題將被關閉。 – Taryn

+0

因此,1個開始日期和3個結束日期給你3個週期。而且你想要統計三個時期每個月的三十年中每一個月出現的次數。是對的嗎?不過,我仍然不確定接下來要做什麼。 –

回答

1

SQL Fiddle

MS SQL Server 2008的架構設置

create table YourTable 
(
    dt1 datetime, 
    dt2 datetime 
) 

insert into YourTable values(getdate(), dateadd(day, 2, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 3, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 11, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 2, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 3, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 11, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 7, getdate())) 
insert into YourTable values(getdate(), dateadd(day, 6, getdate())) 

查詢1

select S1/S2 as 'smaller than 11', 
     (S2 - S1)/S2 as 'greater than 11 + < 21' 
from (
    select 1.0 * sum(case when datediff(day, dt1, dt2) < 11 then 1 else 0 end) as S1, 
      1.0 * sum(case when datediff(day, dt1, dt2) < 21 then 1 else 0 end) as S2 
    from YourTable 
    where datediff(day, dt1, dt2) < 21 
    ) as T 

Results

| SMALLER THAN 11 | GREATER THAN 11 + < 21 | 
-------------------------------------------- 
|   0.75 |     0.25 |