通过仔细使用 dateadd 和 datediff,可以实现这一点。我的解决方案将时间四舍五入。
第一部分计算行日期和纪元 (0) 之间的分钟数,并对其进行 mod 15,给出行日期和最近的 15 分钟间隔之间的差异:
select -1 * datediff(minute, 0, mydate) % 15
from mytable
接下来,我们只需要处理分钟,因此我们使用我从 SQL Server 杂志 2007 年 2 月(Itzik Ben-Gan 的日期时间计算)中学到的日期部分剥离技术:
select dateadd(minute, datediff(minute, 0, mydate), 0)
from mytable
然后,我们将差异添加到行的日期列和组中并进行计数,瞧!
select dateadd(minute, -1 * datediff(minute, 0, mydate) % 15, dateadd(minute, datediff(minute, 0, mydate), 0)), count(ID)
from mytable
group by dateadd(minute, -1 * datediff(minute, 0, mydate) % 15, dateadd(minute, datediff(minute, 0, mydate), 0))