使用: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
答案 0 :(得分:1)
默认情况下,计数是整数,任何数学运算都会产生整数。要生成小数,首先在执行操作之前将计数(*)强制转换为小数。
CAST(CAST(COUNT(*) as Decimal) / DATEDIFF(day, MIN(f_sessiondate),MAX(f_sessiondate)) as DECIMAL(18,2)) as 'Average Sessions Fixed',