2015-01-21 3 views
0

두 개의 시간 소인을 기초로 시간 | 위를 작성하려고합니다.두 개의 시간 소인 사이에 시간 | 위를 작성하십시오.

2 예 다음은 시작하고 작업 시간을 마무리하는 것은 할 수있다

 STARTTIMESTAMP   ENDTIMESTAMP 
------------------- ------------------- 
22/09/2014 07:00:00 22/09/2014 15:30:00 
22/09/2014 20:00:00 23/09/2014 04:00:00 

. 작업 시간과 관련된 생산성 목표가 있습니다 (즉, 두 번째 예제는 더 조용한 부분에서 발생하기 때문에 첫 번째 예제보다 생산성이 더 높음).

내가 가진 문제는 위의 타임 스탬프 만 얻을 수 있다는 것입니다 (tbl_Raw_Data라는 테이블에서). "생산성"을 결정하기 위해 하루 동안 주어진 30 분 간격으로 얼마나 많은 리소스가 활용되는지 보여주기 위해이를 확장해야합니다.

매일 매일 약간 차이가 있습니다. "크로스 자정"필드 (즉, 작업 시간이 퍼져 나가는 "일"과 30 분 간격을 알아야합니다. 00:00에서 23:59 사이의 숫자 만 볼 수 있습니다.)

월요일에 자정부터 일요일 23시 30 분까지 각 30 분 간격으로 사용되는 평균 리소스입니다. 즉, 작업 시간 범위의 각 간격에 대해 하나의 열이있는 데이터)

생산성을 결정하는데도 사용되는 위치 등 ... 다른 필드도 있습니다 .t에 약 20000 개의 레코드가 있습니다 그는 월간 원시 데이터입니다.

+0

개발중인 플랫폼은 무엇입니까? 모든 언어가 여기 있습니다. – adamdc78

+0

안녕하세요. MS 액세스. 내가 말한 것처럼 - 나는 이것에 대해 새로운 사람이다. – Joey

+0

큰 timespans에 대한 데이터가 있고 그 timespans 경계 내에서 30 분 청크로 균등하게 나누고 싶습니까? 실제 또는 목표를보고 있습니까 (대상을 언급 한 후 "활용 중"이라고 말하면됩니까)? – adamdc78

답변

1

"Numbers"테이블을 사용하여 중간 날짜/시간 값을 생성 할 수 있습니다. "Numbers"테이블에는 0부터 연속 된 정수를 포함하는 단일 열이 있으며 주어진 기간 동안 생성해야하는 30 분의 "버킷"수보다 큽니다. 그래서, 당신의 표가 적어도 31 * 48 = 1488. 내 [숫자] 테이블에 숫자를 포함해야 한달 내내 다루 10,000 행

i 
---- 
    0 
    1 
    2 
    3 
... 
9998 
9999 

그래서 ~ 208일의 범위를 처리 할 수있다.

이제, [tbl_Raw_Data]라는 이름의 입력 테이블

ID STARTTIMESTAMP  ENDTIMESTAMP  
-- ------------------- ------------------- 
1 2014-09-22 07:05:00 2014-09-22 15:30:00 
2 2014-09-22 20:00:00 2014-09-23 04:00:00 
우리가 원시 데이터

를 현재 집합에 대한 날짜를 시작을 결정하기 위해 [qryRawDataDateRange]라는 이름의 액세스에 저장된 쿼리를 생성하고 종료하여 시작할 수 있습니다

우리에게

FirstDate LastDate 
---------- ---------- 
2014-09-22 2014-09-23 

을 제공

SELECT 
    MIN(DateValue(STARTTIMESTAMP)) AS FirstDate, 
    MAX(DateValue(ENDTIMESTAMP)) AS LastDate 
FROM tbl_Raw_Data 

우리는 그 저장된 쿼리를 사용할 수 있습니다

BucketStart   
------------------- 
2014-09-22 00:00:00 
2014-09-22 00:30:00 
2014-09-22 01:00:00 
2014-09-22 01:30:00 
2014-09-22 02:00:00 
2014-09-22 02:30:00 
... 
2014-09-22 22:00:00 
2014-09-22 22:30:00 
2014-09-22 23:00:00 
2014-09-22 23:30:00 
2014-09-23 00:00:00 
2014-09-23 00:30:00 
2014-09-23 01:00:00 
2014-09-23 01:30:00 
2014-09-23 02:00:00 
2014-09-23 02:30:00 
... 
2014-09-23 22:00:00 
2014-09-23 22:30:00 
2014-09-23 23:00:00 
2014-09-23 23:30:00 

이제 우리는 질의를 필요로 반환 날짜

SELECT 
    DateAdd("n", i * 30, FirstDate) AS BucketStart 
FROM Numbers, qryRawDataDateRange 
WHERE DateAdd("n", i * 30, FirstDate) < DateAdd("d", 1, LastDate) 

의 범위를 30 분 "버킷"모든 값을 생성 한 다음 저장된 쿼리에 입력, [qryBucketValues], 등 원시 데이터의 각 시간 간격에 대한 첫 번째 버킷을 알려줍니다.이제 [qryFirstBucket]

SELECT 
    ID, 
    MAX(BucketStart) AS FirstBucket, 
    ENDTIMESTAMP 
FROM 
    tbl_Raw_Data, qryBucketValues 
WHERE BucketStart <= STARTTIMESTAMP 
GROUP BY ID, ENDTIMESTAMP 

이제 우리는 원시 데이터

의 각 행 (ID) 우리에게 개별 버킷 항목을 제공합니다 [qryBucketEntriesById]라는 이름의 쿼리를 만들 수 있습니다

ID FirstBucket   ENDTIMESTAMP  
-- ------------------- ------------------- 
1 2014-09-22 07:00:00 2014-09-22 15:30:00 
2 2014-09-22 20:00:00 2014-09-23 04:00:00 

를 반환하는 쿼리의 이름을 보자

SELECT 
    ID, 
    BucketStart 
FROM qryFirstBucket, qryBucketValues 
WHERE 
    BucketStart >= FirstBucket AND BucketStart < ENDTIMESTAMP 

우리에게

ID BucketStart   
-- ------------------- 
1 2014-09-22 07:00:00 
1 2014-09-22 07:30:00 
1 2014-09-22 08:00:00 
1 2014-09-22 08:30:00 
1 2014-09-22 09:00:00 
1 2014-09-22 09:30:00 
1 2014-09-22 10:00:00 
1 2014-09-22 10:30:00 
1 2014-09-22 11:00:00 
1 2014-09-22 11:30:00 
1 2014-09-22 12:00:00 
1 2014-09-22 12:30:00 
1 2014-09-22 13:00:00 
1 2014-09-22 13:30:00 
1 2014-09-22 14:00:00 
1 2014-09-22 14:30:00 
1 2014-09-22 15:00:00 
2 2014-09-22 20:00:00 
2 2014-09-22 20:30:00 
2 2014-09-22 21:00:00 
2 2014-09-22 21:30:00 
2 2014-09-22 22:00:00 
2 2014-09-22 22:30:00 
2 2014-09-22 23:00:00 
2 2014-09-22 23:30:00 
2 2014-09-23 00:00:00 
2 2014-09-23 00:30:00 
2 2014-09-23 01:00:00 
2 2014-09-23 01:30:00 
2 2014-09-23 02:00:00 
2 2014-09-23 02:30:00 
2 2014-09-23 03:00:00 
2 2014-09-23 03:30:00 
을 제공하는

그런 다음 [tbl_Raw_Data] (ID)에 해당 쿼리를 조인하여 필요에 따라 나머지 원시 데이터 열을 검색 할 수 있습니다.

+0

와우 - 그것은 심각하게 굉장합니다. – Joey

+0

설명해 주셔서 감사합니다. – Joey

+1

@Joey 실제 해결책을 제공했다면이 대답을 받아 들여야합니다. – adamdc78

관련 문제