我尝试将记录与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小时?
答案 0 :(得分:2)
您可以使用DATEDIFF(minute, 0, [TimeStamp])
来获取从纪元开始的分钟数。然后你可以简单地除以90并获得你所在的组。
也许你必须添加一些偏移量。使用DATEADD(minute, [your group]*90, 0)
,您可以获得该特殊组的开始时间。
对于你的代码(+减少许多演员阵容):
DECLARE @Interval int = 90
DECLARE @OffsetTime datetime = 0
SELECT DATEADD(minute, (DATEDIFF(minute, @OffsetTime, [TimeStamp]) / @Interval) * @Interval, @OffsetTime) INTERVAL_TIME
请注意,此代码适用于您要分组的任何时间间隔。
答案 1 :(得分:1)
一天有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.当天的第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)
答案 2 :(得分:0)
假设您有一个transaction_date
列的日期时间表,您可以这样做 -
select count(1) from tbl_master group by datediff(minute,cast(floor(cast(transaction_date as float)) as datetime),transaction_date)/90
这里我们将transaction_date
转换为浮动然后将其铺设。因此,时间部分将从日期时间中删除。然后我们使用datediff
计算总分钟数并将其除以90,持续1.5小时。