我目前正在开发一个使用 SQL 数据库的应用程序。在这个数据库中,我维护了一个名为session的表,它有三个字段:会话ID(int),date_created(datetimeoffset)和date_expired(datetimeoffset)字段。
我想将我的会话分组到会话的组中,会话的最小date_created和最大date_expired不超过 6 小时。另外,我不希望我的组重叠,即如果会话 s1 属于组 1,我不希望它也在组 2 中。
有什么想法吗?
我建议您创建 4 个数据组,例如 0-6、6-12、12-18 和 18-24,因此您可以这样做:
仅供参考:为简单起见,我只对日期列进行了case
,您需要在date_created和date_expired之间使用日期差异
仅供参考2:更改两者之间的值,因为它更适合您,最后查询将返回值为1,2,3和4,您应该将其更改为"0到6","6到12"等等。
with MyCTE as (
select case
when datepart(hh,date ) between 0 and 6 then 1
when datepart(hh,date ) between 6 and 12 then 2
when datepart(hh,date ) between 13 and 18 then 3
else 4
end
as myDatebucket
, *
from session
)
select myDatebucket, count(*)
from MyCTE
group by myDatebucket
order by myDatebucket