Tsql 按90分钟间隔分组
我试图将带有DATETIME字段的记录按90分钟的间隔分组 我可以按60分钟的任意数量分组,可以使用: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
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