SQL - 收集最早和最新的记录,并获得天数

时间:2014-10-29 15:56:55

标签: sql sql-server

使用:SQL Server 2008 R2

是否可以在不使用CTE的情况下获取最旧和最新的记录,然后在单个SELECT语句中获取(DATEDIFF)之间的天数?

澄清一下,这是我当前的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

1 个答案:

答案 0 :(得分:1)

默认情况下,计数是整数,任何数学运算都会产生整数。要生成小数,首先在执行操作之前将计数(*)强制转换为小数。

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