Tsql 按90分钟间隔分组

Tsql 按90分钟间隔分组,tsql,Tsql,我试图将带有DATETIME字段的记录按90分钟的间隔分组 我可以按60分钟的任意数量分组,可以使用: SET @Interval = 3 -- Every 3 Minutes SELECT CAST( CONVERT(VARCHAR(8), [TIME_STAMP],112) + ' ' + CONVERT(VARCHAR(2), DATEPART(hh, [TIME_STAMP])) + ':' + CONVERT(VARCHAR(2

我试图将带有DATETIME字段的记录按90分钟的间隔分组

我可以按60分钟的任意数量分组,可以使用:

SET @Interval = 3 -- Every 3 Minutes
SELECT   CAST(
     CONVERT(VARCHAR(8), [TIME_STAMP],112)            + ' ' +
     CONVERT(VARCHAR(2), DATEPART(hh, [TIME_STAMP]))  + ':' +
     CONVERT(VARCHAR(2), DATEPART(mi, [TIME_STAMP]) / @Interval * @Interval)
             AS DATETIME) INTERVAL_TIME
或按整小时分组,使用:

SET @Interval = 4 --Every 4 hours 
SELECT CAST(
    CONVERT(VARCHAR(8), [TIME_STAMP],112) + ' ' +
    CONVERT(VARCHAR(2), DATEPART(hh, [TIME_STAMP]) / @Interval * @Interval ) 
            + ':00'
            AS DATETIME) INTERVAL_TIME
如何按90分钟或1.5小时进行分组?

您可以使用
DATEDIFF(分钟,0,[时间戳])
获取从历元开始的分钟数。然后你可以简单地除以90,得到你所在的组

也许你得加些补偿。使用
DATEADD(分钟,[您的组]*90,0)
可以获得该特殊组的开始时间

对于您的代码(+减少了许多强制转换):


请注意,此代码适用于您想要分组的任何间隔。

一天中有16个单独的90分钟间隔,每天由1440分钟组成

计算一天中的当前分钟数并计算其间隔。假设是15:20

ROUND(1440 / ((DATEPART(hh, [TIME_STAMP]) * 60) + DATEPART(mm, [TIME_STAMP])), 0, 1)
这就变成了:

ROUND(1440 / ((15*60) + 20), 0, 1)
所以你的答案是10。一天中的第十次间隔。将此计算添加到列并按其分组

SELECT Col1, Col2, ROUND(1440 / ((DATEPART(hh, [TIME_STAMP]) * 60) + DATEPART(mm, [TIME_STAMP])), 0, 1)
    FROM MyTable
    GROUP BY    ROUND(1440 / ((DATEPART(hh, [TIME_STAMP]) * 60) + DATEPART(mm, [TIME_STAMP])), 0, 1)

假设您有一个带有
transaction\u date
列的表,该列为datetime,您可以这样做-

select count(1) from tbl_master group by datediff(minute,cast(floor(cast(transaction_date as float)) as datetime),transaction_date)/90
在这里,我们将
事务\u日期
转换为浮动,然后将其固定。因此,时间部分将从日期时间中删除。然后,我们使用
datediff
计算通过的总分钟数,并将其除以90,得到1.5小时

select count(1) from tbl_master group by datediff(minute,cast(floor(cast(transaction_date as float)) as datetime),transaction_date)/90