1

我目前正在开发一个使用 SQL 数据库的应用程序。在这个数据库中,我维护了一个名为 session 的表,它具有三个字段:一个 session id (int)、一个 date_created (datetimeoffset) 和一个 date_expired (datetimeoffset) 字段。

我想将我的会话分组到会话集群中,会话的最短 date_created 和最长 date_expired 不超过 6 小时。另外,我不希望我的组重叠,即如果会话 s1 属于第 1 组,我不希望它也属于第 2 组。

有任何想法吗?

4

1 回答 1

1

我建议您创建 4 个数据组,例如 0-6、6-12、12-18 和 18-24,因此您可以这样做:

仅供参考:为简单起见,我case只在日期列上进行了操作,您需要在 date_created 和 date_expired 之间使用 datediff

FYI2:更改中间值,因为它更适合您,最后查询将返回值 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
于 2012-06-25T12:57:49.047 回答