2014-10-29 43 views
0

使用:SQL Server 2008 R2的SQL - 收集最古老和最新纪录,并获得天之间

是否有可能,不使用CTE,以获得最古老和最新的记录,然后得到的天(DATEDIFF)在一个SELECT语句中?

为了澄清,这是我目前的SELECT语句:

SELECT 
COUNT(*) as 'Sessions', 
MAX(f_sessiondate) AS 'Latest', 
MIN(f_sessiondate) as 'Oldest' 

所以,说我得到以下结果

Sessions   Latest       Oldest 
2610    2014-10-28 00:00:00.000  2013-12-23 00:00:00.000 

我想是得到“平均会话每一天”在“最新”和“最旧”条目之间做一个DATEDIFF。所以'天'是309,而“每天平均会话”将是8.45(四舍五入)。

编辑

靠运气的一些行程,我得到它的工作在一定程度上,虽然我很想念我的小数。以下是我添加的内容:

CAST(COUNT(*)/DATEDIFF(day, MIN(f_sessiondate),MAX(f_sessiondate)) as DECIMAL(18,2)) as 'Average Sessions Fixed', 

根据以上(更新后)的数字,我会得到8.44(309天)的结果。但是,SQL给了我8.00的结果。我怎样才能得到正确的小数?

由于提前,

Beems

+2

您应该将您的点数(*)作为小数点。 – Will 2014-10-29 16:04:38

+2

CAST(cast(COUNT(*)为十进制)/ DATEDIFF .....) – Will 2014-10-29 16:06:48

+0

这样做了,谢谢。你能否将其作为正式答复发布,以便我可以标记它? – Beems 2014-10-29 16:08:22

回答

1

默认数是整数,任何数学运算,将导致一个整数。要产生小数,首先在执行操作之前将计数(*)转换为小数。

CAST(CAST(COUNT(*) as Decimal)/DATEDIFF(day, MIN(f_sessiondate),MAX(f_sessiondate)) as DECIMAL(18,2)) as 'Average Sessions Fixed',