2012-06-25 137 views
1

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

我想将会话群集中的最小date_created和会话的最大日期表达式不超过6小时。另外,我不希望我的组重叠,即如果会话s1属于组1,我不希望它也在组2中。

任何想法?

+1

要求不清楚:你是否希望按持续时间对他们进行分组,或者按开始日期,结束日期,时间等进行分组,如果一个人开始于上午8:00,结束于上午8:10,另一个开始于上午9:00,结束于9:15,另一个在下午2:01开始,前两个将“分组在一起,下午2:01分将在第二组(假设所有人都在同一天)? – xQbert

+0

我想按开始日期和结束日期对它们进行分组。唯一的限制应该是对于一个集合中的两个会话,他们的时间差(在开始日期和结束日期之间)不会超过6个小时。 –

回答

1

我建议你创建4个数据组像0-6,6-12,12-18和18-24,这样你就可以这样做:FYI

:为简单起见,我没有日期列上的case而已,你将需要使用你的DATE_CREATED和date_expired

FYI2之间的DATEDIFF:改变的值,因为它更适合你,到最后的查询将值返回到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 
+0

非常感谢迭戈 –