Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-收集最早和最新的记录,并获取时间间隔_Sql_Sql Server - Fatal编程技术网

SQL-收集最早和最新的记录,并获取时间间隔

SQL-收集最早和最新的记录,并获取时间间隔,sql,sql-server,Sql,Sql Server,使用:SQL Server 2008 R2 在不使用CTE的情况下,是否可以在单个SELECT语句中获取最早和最新的记录,然后获取日期间隔(DATEDIFF) 为了澄清,以下是我当前的SELECT声明: 选择 将(*)计为“会话”, 最大值(f_sessiondate)为“最新”, 最小值(f_sessiondate)为“最老” 假设我得到以下结果 Sessions Latest Oldest 2610

使用:SQL Server 2008 R2

在不使用CTE的情况下,是否可以在单个SELECT语句中获取最早和最新的记录,然后获取日期间隔(DATEDIFF)

为了澄清,以下是我当前的SELECT声明:

选择
将(*)计为“会话”,
最大值(f_sessiondate)为“最新”,
最小值(f_sessiondate)为“最老”
假设我得到以下结果

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

默认情况下,计数是整数,任何数学运算都将产生整数。要生成十进制数,请先将计数(*)强制转换为十进制数,然后再执行操作

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

您应该将计数(*)转换为十进制。转换(将计数(*)转换为十进制)/DATEDIFF…)成功了,谢谢。你能把它作为一个正式的答案发布吗?我想你应该在DATEDIFF()的结果中加上1,因为你例子中的会话发生在两个不同的日子。同样,如果MIN(f_sessiondate)=MAX(f_sessiondate),您将得到一个零误差除法。如果可以的话,为了保存完整的时间戳,最好将时间差除以24。当然,尽管看起来你基本上回答了自己的问题。