2011-06-14 3 views
1

사용자가 정의한 시간 간격으로 테이블 및 그룹 레코드를 쿼리해야합니다.이 시간은 분 또는 시간의 정수 일 수 있습니다. 한 가지 가정은 선택한 시간 간격이 오전 12시에 시작된다는 것입니다 (이것이 의미가있는 경우). 즉, 사용자가 레코드를 15 분 단위로 그룹화하면 12:07 AM부터 15 분마다 그룹화를 시작할 수 없습니다. 우리는 자동적으로 12:00 AM을 그룹화의 출발점으로 가정/사용합니다. 다른 기간에도 동일합니다.n 분 또는 시간으로 그룹화

이 기능을 직접 작성해야합니까? 퍼포먼스 이슈를 막기 위해 다른 방법/제한을 사용하기 때문에 성능에 지나치게 염려하지 않습니다.

내 표는 다음과 같습니다 : I 함수를 사용하는 경우

timeentry 
--entryid   (autonumber) 
--begindatetime (datetime) 
--enddatetime  (datetime) 

나는이 문제를 생각하지 않는다 그러나 나는 begindatetime에 내 그룹을 기반으로하고 enddatetime 무시 할 계획 않습니다.

MS Access를 사용하고 있지만 가능하면 SQL Server 및 MySQL과 호환되도록 솔루션을 원합니다. 그러나, 현재 나의 주요 초점은 단지 MS 액세스입니다.

+0

당신이 DATEDIFF 봤어? – Fionnuala

+0

모든 begindatetime 값의 날짜 부분으로 Dec 30 1899가 있습니까? – HansUp

+0

HansUp, 아니요, 실제 날짜 값과 시간 값은 아닙니다. – HK1

답변

1

이전에 비슷한 질문에 답했습니다. 도움이 될 것 같습니다. Here's the answer.

+0

당신의 솔루션이 15 초 간격으로 1 초를 4 초 그룹으로 나누는 것처럼 보입니다. 당신은 이것이 15 분의 해결책을 준다는 것을 나타냅니다. 내가 뭔가를 오해하고 있니? – HK1

+0

@ HK1 분 값 (60)을 15로 나누어 4 개의 가능한 값을 제공합니다. 분이 35 인 경우 35/15 = 2입니다. 그래서 계산 된 값이 0에서 3까지 인 15 분 간격으로 그룹화됩니다. –

2

여기에 Partition() 함수가 유용 할 것 같습니다.

코드는 날짜에 대한 사용자의 선택 사항 (단일 날짜에 대해 begindatetime 값으로 쿼리를 제한한다고 가정 함), 시간 단위 및 그룹 간격을 기반으로 SELECT 문을 작성합니다.

2011 년 6 월 14 일의 날짜, 분, 시간 단위로 15 분, 간격으로 15 분이됩니다.

SELECT 
    Partition(elapsed,0,1440,15) AS time_block, 
    q.id, 
    q.begindatetime 
FROM 
    [SELECT 
     t.id, 
     t.begindatetime, 
     TimeValue(t.begindatetime) * 1440 AS elapsed 
    FROM tblHK1 AS t 
    WHERE 
     t.begindatetime>=#2011-06-14# 
     And t.begindatetime<#2011-06-15# 
    ]. AS q 
ORDER BY q.begindatetime; 

얼마나 좋아할 지 잘 모르겠다. 다음은 몇 가지 출력 예입니다.

time_block id begindatetime 
    60: 74 1 6/14/2011 1:06:05 AM 
555: 569 3 6/14/2011 9:15:00 AM 
1395:1409 4 6/14/2011 11:15:00 PM 

time_block 열은 사용자에게 친숙하지 않습니다.

+1

+1 실제로 스티브가 더 좋은 대답을 가지고 있다고 생각하지만 +1은 나를 소개합니다. Partition() 함수에 전달합니다. 나는 내 머리 꼭대기에서 그것을 사용할 시간을 실제로 생각할 수는 없지만, 그것이 딱 맞는 상황에서 매우 귀중한 것처럼 보입니다. – mwolfe02

+0

@ mwolfe02 오른쪽. 파티션()은 종종 간과되는 것 같습니다. – HansUp

+0

+1은 Partition()의 실제 용도를 파악합니다. 나는 그것을 부분적으로하고 있지만 그것을 사용하는 데 아무 것도 발견하지 못했다. –

0

나는 당신이 원하는 것을 아주 잘 모르겠지만, 여기에서 아이디어 :

SELECT DateDiff("n",CDate("00:00"),[BeginDateTime])\15 AS No15s, 
     (DateDiff("n",CDate("00:00"),[BeginDateTime])\15)*15 AS NoMins, 
     Count(Table1.BeginDateTime) AS [Count] 
FROM Table1 
GROUP BY DateDiff("n",CDate("00:00"),[BeginDateTime])\15, 
     (DateDiff("n",CDate("00:00"),[BeginDateTime])\15)*15; 
관련 문제