2015-01-21 143 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分鐘的時間間隔中使用的平均資源(即,我希望所有其他人在工作時間範圍內的每個區間有一列的數據)

還有其他領域,我需要也理解,即;位置等,這也是用來確定生產力。他每月的原始數據。

+0

你在開發什麼平臺?每種語言都是可能的。 – adamdc78 2015-01-21 02:12:03

+0

你好。 MS Access。就像我說的 - 我是新手。 – Joey 2015-01-21 02:15:09

+0

因此,您有大量時間段的數據,並且您希望在該時間範圍內平均分爲半個小時的塊?你在看實際還是目標(你提到了目標,然後繼續說「被利用」)? – adamdc78 2015-01-21 02:18:34

回答

1

您可以使用「Numbers」表生成中間日期/時間值。您的「Numbers」表格將包含單個列,其中包含從零到大於您需要爲給定日期範圍創建的半小時「桶」數量的連續整數。因此,要覆蓋整個月你的表必須包含數字至少達到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]訪問已保存的查詢,以確定起始日期和結束日期開始
SELECT 
    MIN(DateValue(STARTTIMESTAMP)) AS FirstDate, 
    MAX(DateValue(ENDTIMESTAMP)) AS LastDate 
FROM tbl_Raw_Data 

這讓我們

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

我們可以使用保存的查詢作爲輸入到下保存的查詢,[qryBucketValues],這對於該日期範圍

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

的返回

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 

現在我們需要一個查詢創建的所有30分鐘的「水桶」的價值觀告訴我們原始數據中每個時間段的第一個「桶」。讓我們名稱查詢[qryFirstBucket]

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

返回

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 

現在,我們可以創建一個名爲[qryBucketEntriesById]查詢這給我們的個人鬥條目中的原始數據

每一行(ID)
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 2015-01-21 23:05:30

+0

非常感謝你解釋這一點。 – Joey 2015-01-21 23:06:23

+1

@Joey如果它確實爲您提供了一個工作解決方案,請務必接受此答案。 – adamdc78 2015-01-22 21:38:56

相關問題