2012-06-25 139 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

非常感謝迭戈 –