2012-12-07 90 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 |