如何使用datepart()每60天计算一次?

时间:2016-03-31 07:32:44

标签: sql-server datetime

以下查询(在MSSQL上)给出了问题的正确答案:每月收集多少IP。 我想知道如何每60天计算一次?

select MIN(rowdate) min_rowdate, 
       MAX(rowdate) max_rowdate, 
       count(distinct IP), 
       DATEPART(MONTH, rowdate) month_
from t_tbl tl (nolock)
where rowdate between '2015-01-01 00:00:00' and '2015-12-31 23:59:59'
group by DATEPART(MONTH, rowdate)

1 个答案:

答案 0 :(得分:3)

你可以使用DATEDIFF和一些简单的数学来获得它:

select MIN(rowdate) min_rowdate, MAX(rowdate) max_rowdate, count(distinct IP),
       DATEDIFF(day, 0, rowdate) / 60 as day60
from t_tbl tl (nolock)
where rowdate >= '20150101' and rowdate < '20160101'
group by DATEDIFF(day, 0, rowdate) / 60

在这种情况下,它使用1900-01-01(0被转换为什么)作为前60天的开始时间,所有后续时间段都从那里开始。

如果您想在报告期间使用不同的“固定点”,则应将其替换为0作为DATEDIFF的第二个参数。

(我还更正了您的WHERE子句,以便它不排除在 2015年最后一秒期间发生的事件,即非零毫秒值