2014-10-07 2 views
-3

나는이 모양의 테이블을 가지고 있으며 6 시간 동안 등록 된 항목의 수를 알고 최대 항목 수가있는 해당 기간을 표시하려고합니다. mysql의 단일 열에 대한 루핑

Time 
09:42:29 
10:37:28 
15:18:49 
15:28:34 
16:43:51 
18:14:10 
18:26:06 
18:26:14 

그래서 시간 열에서 각 요소에 대해, 그 요소부터 6 시간의 기간을 포함하여 해당 열 많은 항목이이 기간에 빠지게하는 방법을 계산합니다. Ex 09:42:29 종료 기간은 15:42:29이며 4로 계산되어야합니다 (09 : 42 : 29,10 : 37 : 28 15 : 18 : 49,15 : 28 : 34) .

시간 열의 각 요소에 대해 이렇게하고 최대 개수가있는 요소 (마침표의 시작 시간이 됨)에 따라 시작 및 끝 기간이 적절하게 표시됩니다.

나를 위해 mysql 쿼리를 작성하는 데 도움이됩니다. 고맙습니다!!!

+0

[* 시도해 봤어? *] (http://whathaveyoutried.com) – Barranka

답변

0

는 희망이 도움이

select 
    T.TimeStart, 
    T.TimeEnd, 
    COUNT(*) 
from (
    select 
     T.Time TimeStart, 
     date_add(T.Time,INTERVAL 6 HOUR) TimeEnd 
    from TimeTable T 
) T 
inner join TimeTable T2 on 
    T2.Time between T.TimeStart and T.TimeEnd 
group by 
    T.TimeStart, 
    T.TimeEnd 

아래 코드는 MSSQL입니다하지만 예상대로 작동하고 위의 예제를 사용할 수있는 방법을 몇 가지 가이드 라인을 제공한다

WITH TimeTable([Time]) AS (
select 
CONVERT(DATETIME,a.a) 
from (
values 
('09:42:29'), 
('10:37:28'), 
('15:18:49'), 
('15:28:34'), 
('16:43:51'), 
('18:14:10'), 
('18:26:06'), 
('18:26:14'))a(a) 
) 
select 
    convert(time(7),T.TimeStart)TimeStart, 
    convert(time(7),T.TimeEnd)TimeEnd, 
    COUNT(*) [Ocorrences] 
from (
    select 
     T.Time TimeStart, 
     DATEADD(HOUR,6,T.Time) TimeEnd 
    from TimeTable T 
) T 
inner join TimeTable T2 on 
    T2.Time between T.TimeStart and T.TimeEnd 
group by 
    T.TimeStart, 
    T.TimeEnd 

Result

+0

아니요 실제로 많이 도움이되지 않았습니다. 카운트 값이 예상 한 값이 아닙니다. – wittyenggs

+0

@wittyenggs가 내 편집 응답의 결과입니까? – mxix

+0

@mxix .... 답변 주셔서 감사합니다 ....하지만 값이 데이터베이스에있는 것들이 아닐 수도 있습니다 .... 그런 경우 미리 정의 된 값을 사용할 수 없습니다 .... 대체 무엇입니까 그것을 위해. – wittyenggs