2011-12-19 2 views
2

datetime_in, datetime_out, card_id, group이있는 테이블이 있습니다. (일) 그룹, 날짜별로 그룹화 SQL 쿼리가 15 분으로 중단됩니다.

group ; date  ; quarterTime ; persons_in ; hours 
group1 ; 17-02-2010 ; 00:00 - 00:15 ; 0   ; 0 
group1 ; 17-02-2010 ; 00:15 - 00:30 ; 0   ; 0 
group1 ; 17-02-2010 ; 00:30 - 00:45 ; 0   ; 0 
~etc 
group1 ; 17-02-2010 ; 13:00 - 12:15 ; 334  ; 1483 

end then the same for all the groups starting with 00:00 until 23:45 

그래서 하루의 각 quearter을 위해 내가 기록을 갖고 싶어하고, quarterTime : 나는 다음과 같은 문제에 출력을 원하는 알 수 있습니다. 그러면 persons_in에서 나는 그 분기 내에서의 레코드 카운트를 원하고, 현재 쿼터가 끝날 때까지 그 날 동안 얼마나 많은 인력 시간이 총 근무했는지를 원합니다. 그래서 하루에 더 높고 높은 수치를 보였습니다. 반면에 인원 수는 그 분기에 불과했습니다. 그래서 내 질문은, 지금은 정말 더러운 C#을 스크립트를이 일을, 내가 원하는 실행 optimidization 단지 1 쿼리입니다.

저장 프로 시저를 사용하는 것이 마음에 들지 않지만, IM에서는 SQL을 사용하지 않기 때문에 T-SQL을 선호합니다.

아무도 아이디어를 가지고 어떻게해야합니까? 예?

+1

15 분 그룹화 부분은 [SQL - 15 분 레코드로 시작/종료 시간 끊기]입니다 (http://stackoverflow.com/questions/2921760/sql-break-a-start-end-time - 15 분 기록). 누적 합계 부분은 [SqlServer에서 누적 합계 계산] (http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver)과 중복됩니다. – GSerg

+0

감사합니다. ik는 SqlServer에서 누적 합계 계산을 사용할 수 있지만 15 분으로 나누기 시작/끝 시간은 원하는 것과 다릅니다. – Eijso

답변

2

당신은 그룹에 대한 날짜를 변환하는이 논리를 사용할 수 있습니다

SELECT 
     CONVERT(bigint,Year(GETDATE())) * power(10,7) + 
     Month(GETDATE()) * POWER(10,5) + 
     Day(GETDATE()) * POWER(10,3) + 
     Datepart(hh,GETDATE()) * POWER(10,1) + 
     DATEPART(mi,GETDATE())/15 AS Agg_Date 

19/12/2011 13시 31분 => 20111219132

각 15분

는 동일한 키를 가지고있다.